From 99cacbe786d7e08e64ba3a4224b78542775d6688 Mon Sep 17 00:00:00 2001 From: Pavitra Date: Sun, 19 Apr 2020 11:45:06 +0530 Subject: [PATCH 01/35] Initial --- appinventor/blocklyeditor/build.gradle | 19 ++++ appinventor/build.gradle | 16 ++++ appinventor/common/build.gradle | 127 +++++++++++++++++++++++++ appinventor/components/build.gradle | 111 +++++++++++++++++++++ appinventor/settings.gradle | 1 + 5 files changed, 274 insertions(+) create mode 100644 appinventor/blocklyeditor/build.gradle create mode 100644 appinventor/build.gradle create mode 100644 appinventor/common/build.gradle create mode 100644 appinventor/components/build.gradle create mode 100644 appinventor/settings.gradle diff --git a/appinventor/blocklyeditor/build.gradle b/appinventor/blocklyeditor/build.gradle new file mode 100644 index 00000000000..1f7e75aa075 --- /dev/null +++ b/appinventor/blocklyeditor/build.gradle @@ -0,0 +1,19 @@ +defaultTasks 'BlocklyCompile', 'BlocklyTestbed' + +task BlocklyCompile(type: JavaExec) { + main = '-jar' + args '../lib/plovr/plovr-eba786b34df9.jar', 'build', 'ploverConfig.js' +} + +task BlocklyTestbed { + doLast { + def f1 = file("${rootProject.buildDir}/component-types.js") + def f2 = file("$buildDir/components/simple_components.json") + f1.text = 'var componentTypeJson =' + f2.text + + copy { + from "$blocklySrcDir/media" + into "$publicBuildDir/media" + } + } +} \ No newline at end of file diff --git a/appinventor/build.gradle b/appinventor/build.gradle new file mode 100644 index 00000000000..f8442c4c3c1 --- /dev/null +++ b/appinventor/build.gradle @@ -0,0 +1,16 @@ +apply plugin: 'application' + +description = 'Definitions common to multiple App Inventor build.xml files.' + +ext { + debug = true + PUBLIC_BUILD_DIR = "$buildDir/${-> name}" // lazy +} + +task clean { + doLast { + delete { + files 'build', 'reports' + } + } +} \ No newline at end of file diff --git a/appinventor/common/build.gradle b/appinventor/common/build.gradle new file mode 100644 index 00000000000..3761c062cad --- /dev/null +++ b/appinventor/common/build.gradle @@ -0,0 +1,127 @@ +import org.apache.tools.ant.filters.ReplaceTokens + +defaultTasks 'CommonUtils', + 'CommonVersion', + 'BlocksEditorHttpConstants' + +ext.commonPkg = 'com/google/appinventor/common' + +task CommonUtils { + doLast { + def CommonUtilsClassDir = "$buildDir/classes/CommonUtils" + + compileJava { + include "$commonPkg/utils/*.java" + classpath = file('../lib/guava/guava-14.0.1.jar"') + destinationDir = file(CommonUtilsClassDir) + } + + jar { + from CommonUtilsClassDir + destinationDir = file('../build/CommonUtils') + } + + jar { + from CommonUtilsClassDir + from "$projectDir/src" { + includes "$commonPkg/utils/*.java" + includes "$commonPkg/CommonUtils.gwt.xml" + } + destinationDir = file("../build/CommonUtils-gwt") + + } + } +} + +task CommonTranslations { + doLast { + def CommonTranslationsClassDir = "$buildDir/classes/CommonTranslations" + + compileJava { + include "$commonPkg/translations/*.java" + destinationDir = file(CommonTranslationsClassDir) + } + + jar { + from CommonTranslationsClassDir + destinationDir = file("../build/CommonTranslations") + } + } +} + +task CommonVersion { + doLast { + def CommonVersionClassDir = "$buildDir/classes/CommonVersion" + + def gitBuildVersion = 'git describe --dirty'.execute().text.trim() + def gitBuildFingerprint = 'git rev-parse HEAD'.execute().text.trim() + def antBuildDate = new Date().format('MMMM dd yyyy') + def acraUri = '' + + copy { + from 'GitBuildId.template' + into "$buildDir/src/$commonPkg/version/" + + filter ReplaceTokens, tokens: [ + "git.build.version": gitBuildVersion, + "git.build.fingerprint": gitBuildFingerprint, + "ant.build.date": antBuildDate, + "acra.uri": acraUri + ] + filteringCharset = 'UTF-8' + + rename '(GitBuildId).template', '$1.java' + } + + compileJava { + source 'src', "$buildDir/src" + include "$commonPkg/version/*.java" + destinationDir = file(CommonVersionClassDir) + } + + jar { + from CommonVersionClassDir + destinationDir = file('../build/CommonVersion') + } + + jar { + from CommonVersionClassDir + from 'src' { + includes "$commonPkg/version/*.java" + includes "$commonPkg/CommonVersion.gwt.xml" + } + from "$buildDir/src" { + includes "$commonPkg/version/*.java" + } + destinationDir = file("../build/$name/CommonVersion-gwt") + } + } +} + +task BlocksEditorHttpConstants { + doLast { + def BlocksEditorHttpConstantsClassDir = "$buildDir/class/BlockEditorHttpConstants" + + compileJava { + source 'src' + include "$commonPkg/jsonp/JsonpConstants.java" + include "$commonPkg/youngandroid/YaHttpServerConstants.java" + destinationDir = file(BlocksEditorHttpConstantsClassDir) + } + + jar { + from BlocksEditorHttpConstantsClassDir + destinationDir = file('../build/BlocksEditorHttpConstants') + } + + jar { + from BlocksEditorHttpConstantsClassDir + from "src/$commonPkg" { + include 'jsonp/JsonpConstants.java' + include 'youngandroid/YaHttpServerConstants.java' + include 'BlocksEditorHttpConstants.gwt.xml' + } + destinationDir = file('../build/BlocksEditorHttpConstants-gwt') + } + } +} \ No newline at end of file diff --git a/appinventor/components/build.gradle b/appinventor/components/build.gradle new file mode 100644 index 00000000000..6bd1c01bdd3 --- /dev/null +++ b/appinventor/components/build.gradle @@ -0,0 +1,111 @@ +apply plugin: 'application' + +defaultTasks 'CommonConstants', + 'AndroidRuntime', + 'JsonComponentDescription', + 'XmlComponentDescription', + 'ComponentList', + 'ComponentTranslation', + 'Barcode' + +ext { + componentsPkg = 'com/google/appinventor/components' + zxingPkg = 'com/google/zxing' + barcodePkg = 'com/google/zxing/client/android' + + projectDir = "${project.projectDir}" // basedir + //localBuildDir = "$projectDir/build" // local.build.dir + classDir = "$buildDir/classes" // class.dir + //reportsDir = "$projectDir/reports" // reports.dir + //srcDir = "$projectDir/src" // src.dir + //testsDir = "$projectDir/tests" // tests.dir + // projectDir = "$projectDir" // basedir + // localBuildDir = "$buildDir" // local.build.dir + classDir = "$buildDir/classes" // class.dir + // reportsDir = "$projectDir/reports" // reports.dir + // srcDir = "$projectDir/src" // src.dir + // testsDir = "$projectDir/tests" // tests.dir + + ExternalComponentGeneratorClassDir = + "$classDir/ExternalComponentGenerator" + ExternalComponentDir = "$buildDir/externalComponents" + ExternalComponentClassDir = "$buildDir/externalComponents-class" + ExtensionsDir = "$buildDir/extensions" + extensionsPackageFqcn = false // Can be used by extension authors to use the old-style AIX package layout +} + +task CommonConstants { + doLast { + def CommonConstantsClassDir = "$classDir/CommonConstants" + + compileJava { + include "$componentsPkg/common/*.java" + exclude "$componentsPkg/common/HtmlEntities.java" + destinationDir = file(CommonConstantsClassDir) + } + + jar { + include CommonConstantsClassDir + destinationDir = file(buildDir) + } + } +} + +task Barcode { + description = 'Generate ZXing embedded library' + + doLast { + def BarcodeClassDir = "$classDir/Barcode" + + compileJava { + include "$barcodePkg/**/*.java" + classpath = files('libs/QRGenerator/core.jar', + 'libs/android/5.1.1/android.jar') + + destinationDir = file(BarcodeClassDir) + } + + jar { + include fileTree(dir: BarcodeClassDir) + destinationDir = file("build") + } + + jar { + include fileTree(dir: CommonConstantsClassDir) + destinationDir = file("$buildDir") + } +} + +def unjarExtensionLibs() { + task "unzip" { + doLast { + unzip { + + } + } + } +} + +task UnjarAllExtensionLibs { + doLast { + for (extension : ) + } +} + +task ExternalComponentGenerator { + def buildserverFilesLibDir = '../buildserver/build/classes/BuildServer/files' + + new File(ext.ExternalComponentGeneratorClassDir).mkdirs() + new File(ext.ExternalComponentDir).mkdirs() + new File(ext.ExternalComponentClassDir).mkdirs() + + java { + + } +} + +def unjarExtensionLibraries() { + unzip { + + } +} \ No newline at end of file diff --git a/appinventor/settings.gradle b/appinventor/settings.gradle new file mode 100644 index 00000000000..e5f8b8716e4 --- /dev/null +++ b/appinventor/settings.gradle @@ -0,0 +1 @@ +include 'blocklyeditor', 'common', 'components' \ No newline at end of file From 4cbfaaa2a7f385aa54c64c2108d249380009fbde Mon Sep 17 00:00:00 2001 From: Pavitra Date: Sun, 19 Apr 2020 15:51:42 +0530 Subject: [PATCH 02/35] More --- appinventor/blocklyeditor/build.gradle | 24 +-- appinventor/build.gradle | 14 +- appinventor/common/build.gradle | 194 ++++++++++--------------- appinventor/components/build.gradle | 126 ++++------------ appinventor/settings.gradle | 1 + 5 files changed, 118 insertions(+), 241 deletions(-) diff --git a/appinventor/blocklyeditor/build.gradle b/appinventor/blocklyeditor/build.gradle index 1f7e75aa075..1a29f6f4a55 100644 --- a/appinventor/blocklyeditor/build.gradle +++ b/appinventor/blocklyeditor/build.gradle @@ -1,19 +1,11 @@ -defaultTasks 'BlocklyCompile', 'BlocklyTestbed' - -task BlocklyCompile(type: JavaExec) { - main = '-jar' - args '../lib/plovr/plovr-eba786b34df9.jar', 'build', 'ploverConfig.js' +plugins { + id 'java' } -task BlocklyTestbed { - doLast { - def f1 = file("${rootProject.buildDir}/component-types.js") - def f2 = file("$buildDir/components/simple_components.json") - f1.text = 'var componentTypeJson =' + f2.text - - copy { - from "$blocklySrcDir/media" - into "$publicBuildDir/media" - } - } +defaultTasks 'BlocklyCompile' + +task BlocklyCompile(type: JavaExec) { + // TODO: map inputs and outputs + classpath = files('../lib/plovr/plovr-eba786b34df9.jar') + args = ['build', 'ploverConfig.js'] } \ No newline at end of file diff --git a/appinventor/build.gradle b/appinventor/build.gradle index f8442c4c3c1..ed97b9bb67a 100644 --- a/appinventor/build.gradle +++ b/appinventor/build.gradle @@ -1,16 +1,10 @@ -apply plugin: 'application' - description = 'Definitions common to multiple App Inventor build.xml files.' ext { debug = true - PUBLIC_BUILD_DIR = "$buildDir/${-> name}" // lazy } -task clean { - doLast { - delete { - files 'build', 'reports' - } - } -} \ No newline at end of file +task clean(type: Delete) { + delete 'build' + delete 'reports' +} diff --git a/appinventor/common/build.gradle b/appinventor/common/build.gradle index 3761c062cad..bc7365ac85f 100644 --- a/appinventor/common/build.gradle +++ b/appinventor/common/build.gradle @@ -1,127 +1,85 @@ import org.apache.tools.ant.filters.ReplaceTokens -defaultTasks 'CommonUtils', - 'CommonVersion', - 'BlocksEditorHttpConstants' - -ext.commonPkg = 'com/google/appinventor/common' - -task CommonUtils { - doLast { - def CommonUtilsClassDir = "$buildDir/classes/CommonUtils" - - compileJava { - include "$commonPkg/utils/*.java" - classpath = file('../lib/guava/guava-14.0.1.jar"') - destinationDir = file(CommonUtilsClassDir) - } - - jar { - from CommonUtilsClassDir - destinationDir = file('../build/CommonUtils') - } - - jar { - from CommonUtilsClassDir - from "$projectDir/src" { - includes "$commonPkg/utils/*.java" - includes "$commonPkg/CommonUtils.gwt.xml" - } - destinationDir = file("../build/CommonUtils-gwt") - - } - } +plugins { + id 'java' } -task CommonTranslations { - doLast { - def CommonTranslationsClassDir = "$buildDir/classes/CommonTranslations" - - compileJava { - include "$commonPkg/translations/*.java" - destinationDir = file(CommonTranslationsClassDir) - } - - jar { - from CommonTranslationsClassDir - destinationDir = file("../build/CommonTranslations") - } - } +sourceSets { + commonUtils { + java { + srcDirs = ['src/com/google/appinventor/common/utils/'] + // TODO: compiledBy + } +// TODO: breaks when commonUtils & commonVersion both have same resources dir +// resources { +// srcDirs = ['src/com/google/appinventor/common/'] +// include 'CommonUtils.gwt.xml' +// } + } + commonVersion { + java { + srcDirs = [ + 'src/com/google/appinventor/common/version/', + "$buildDir/gen/src/com/google/appinventor/common/version/" + ] + } +// TODO: see above +// resources { +// srcDirs = ['src/com/google/appinventor/common/'] +// include 'CommonVersion.gwt.xml' +// } + } } -task CommonVersion { - doLast { - def CommonVersionClassDir = "$buildDir/classes/CommonVersion" - - def gitBuildVersion = 'git describe --dirty'.execute().text.trim() - def gitBuildFingerprint = 'git rev-parse HEAD'.execute().text.trim() - def antBuildDate = new Date().format('MMMM dd yyyy') - def acraUri = '' - - copy { - from 'GitBuildId.template' - into "$buildDir/src/$commonPkg/version/" - - filter ReplaceTokens, tokens: [ - "git.build.version": gitBuildVersion, - "git.build.fingerprint": gitBuildFingerprint, - "ant.build.date": antBuildDate, - "acra.uri": acraUri - ] - filteringCharset = 'UTF-8' - - rename '(GitBuildId).template', '$1.java' - } - - compileJava { - source 'src', "$buildDir/src" - include "$commonPkg/version/*.java" - destinationDir = file(CommonVersionClassDir) - } - - jar { - from CommonVersionClassDir - destinationDir = file('../build/CommonVersion') - } - - jar { - from CommonVersionClassDir - from 'src' { - includes "$commonPkg/version/*.java" - includes "$commonPkg/CommonVersion.gwt.xml" - } - from "$buildDir/src" { - includes "$commonPkg/version/*.java" - } - destinationDir = file("../build/$name/CommonVersion-gwt") - } - } +dependencies { + commonUtilsImplementation files('../lib/guava/guava-14.0.1.jar') } -task BlocksEditorHttpConstants { - doLast { - def BlocksEditorHttpConstantsClassDir = "$buildDir/class/BlockEditorHttpConstants" - - compileJava { - source 'src' - include "$commonPkg/jsonp/JsonpConstants.java" - include "$commonPkg/youngandroid/YaHttpServerConstants.java" - destinationDir = file(BlocksEditorHttpConstantsClassDir) - } - - jar { - from BlocksEditorHttpConstantsClassDir - destinationDir = file('../build/BlocksEditorHttpConstants') - } - - jar { - from BlocksEditorHttpConstantsClassDir - from "src/$commonPkg" { - include 'jsonp/JsonpConstants.java' - include 'youngandroid/YaHttpServerConstants.java' - include 'BlocksEditorHttpConstants.gwt.xml' - } - destinationDir = file('../build/BlocksEditorHttpConstants-gwt') - } - } +defaultTasks 'CommonUtilsJar', 'CommonUtilsGwtJar', 'CommonVersionJar', 'CommonVersionGwtJar' + +task GitBuildId(type: Copy) { + from 'GitBuildId.template' + into "$buildDir/gen/src/com/google/appinventor/common/version/" + + filter ReplaceTokens, tokens: [ + "git.build.version" : 'git describe --dirty'.execute().text.trim(), + "git.build.fingerprint": 'git rev-parse HEAD'.execute().text.trim(), + "ant.build.date" : new Date().format('MMMM dd yyyy'), + "acra.uri" : '' + ] + filteringCharset = 'UTF-8' + + rename '(GitBuildId).template', '$1.java' +} + +compileCommonVersionJava.dependsOn GitBuildId + +task CommonUtilsJar(type: Jar) { + from sourceSets.commonUtils.output + + archiveFileName = 'CommonUtils-gwt.jar' +} + +task CommonUtilsGwtJar(type: Jar) { + from sourceSets.commonUtils.output + // TODO: all Java files are flattened in the JAR! + from sourceSets.commonUtils.allJava + from 'src/com/google/appinventor/common/CommonUtils.gwt.xml' + + archiveFileName = 'CommonUtils-gwt.jar' +} + +task CommonVersionJar(type: Jar) { + from sourceSets.commonVersion.output + + archiveFileName = 'CommonVersion.jar' +} + +task CommonVersionGwtJar(type: Jar) { + from sourceSets.commonVersion.output + // TODO: see above + from sourceSets.commonVersion.allJava + from 'src/com/google/appinventor/common/CommonVersion.gwt.xml' + + archiveFileName = 'CommonVersion-gwt.jar' } \ No newline at end of file diff --git a/appinventor/components/build.gradle b/appinventor/components/build.gradle index 6bd1c01bdd3..944e50ad569 100644 --- a/appinventor/components/build.gradle +++ b/appinventor/components/build.gradle @@ -1,111 +1,43 @@ -apply plugin: 'application' - -defaultTasks 'CommonConstants', - 'AndroidRuntime', - 'JsonComponentDescription', - 'XmlComponentDescription', - 'ComponentList', - 'ComponentTranslation', - 'Barcode' - -ext { - componentsPkg = 'com/google/appinventor/components' - zxingPkg = 'com/google/zxing' - barcodePkg = 'com/google/zxing/client/android' - - projectDir = "${project.projectDir}" // basedir - //localBuildDir = "$projectDir/build" // local.build.dir - classDir = "$buildDir/classes" // class.dir - //reportsDir = "$projectDir/reports" // reports.dir - //srcDir = "$projectDir/src" // src.dir - //testsDir = "$projectDir/tests" // tests.dir - // projectDir = "$projectDir" // basedir - // localBuildDir = "$buildDir" // local.build.dir - classDir = "$buildDir/classes" // class.dir - // reportsDir = "$projectDir/reports" // reports.dir - // srcDir = "$projectDir/src" // src.dir - // testsDir = "$projectDir/tests" // tests.dir - - ExternalComponentGeneratorClassDir = - "$classDir/ExternalComponentGenerator" - ExternalComponentDir = "$buildDir/externalComponents" - ExternalComponentClassDir = "$buildDir/externalComponents-class" - ExtensionsDir = "$buildDir/extensions" - extensionsPackageFqcn = false // Can be used by extension authors to use the old-style AIX package layout +plugins { + id 'java' } -task CommonConstants { - doLast { - def CommonConstantsClassDir = "$classDir/CommonConstants" - - compileJava { - include "$componentsPkg/common/*.java" - exclude "$componentsPkg/common/HtmlEntities.java" - destinationDir = file(CommonConstantsClassDir) - } - - jar { - include CommonConstantsClassDir - destinationDir = file(buildDir) +sourceSets { + main { + java { + srcDirs = ['src/com/google/appinventor/components/runtime/'] } } -} - -task Barcode { - description = 'Generate ZXing embedded library' - - doLast { - def BarcodeClassDir = "$classDir/Barcode" - - compileJava { - include "$barcodePkg/**/*.java" - classpath = files('libs/QRGenerator/core.jar', - 'libs/android/5.1.1/android.jar') - - destinationDir = file(BarcodeClassDir) - } - - jar { - include fileTree(dir: BarcodeClassDir) - destinationDir = file("build") + commonConstants { + java { + srcDirs = ['src/com/google/appinventor/components/common/'] + exclude 'HtmlEntities.java' } - - jar { - include fileTree(dir: CommonConstantsClassDir) - destinationDir = file("$buildDir") } -} - -def unjarExtensionLibs() { - task "unzip" { - doLast { - unzip { - - } + htmlEntities { + java { + srcDirs = ['src/com/google/appinventor/components/common/'] + include 'HtmlEntities.java' } } -} - -task UnjarAllExtensionLibs { - doLast { - for (extension : ) + barcodeLib { + java { + srcDirs = ['src/com/google/zxing/client/android/'] + } } } -task ExternalComponentGenerator { - def buildserverFilesLibDir = '../buildserver/build/classes/BuildServer/files' - - new File(ext.ExternalComponentGeneratorClassDir).mkdirs() - new File(ext.ExternalComponentDir).mkdirs() - new File(ext.ExternalComponentClassDir).mkdirs() +dependencies { + barcodeLibCompileOnly files('../lib/QRGenerator/core.jar') + barcodeLibCompileOnly files('../lib/android/5.1.1/android.jar') - java { - - } } -def unjarExtensionLibraries() { - unzip { - - } -} \ No newline at end of file +defaultTasks 'CommonConstants', + 'AndroidRuntime', + 'JsonComponentDescription', + 'XmlComponentDescription', + 'ComponentList', + 'ComponentTranslation', + 'Barcode' + diff --git a/appinventor/settings.gradle b/appinventor/settings.gradle index e5f8b8716e4..788d17b636b 100644 --- a/appinventor/settings.gradle +++ b/appinventor/settings.gradle @@ -1 +1,2 @@ +rootProject.name = 'appinventor' include 'blocklyeditor', 'common', 'components' \ No newline at end of file From 6407604b3b7a5eeb03801cd5adeb568179daf7a4 Mon Sep 17 00:00:00 2001 From: Pavitra Date: Mon, 20 Apr 2020 18:03:27 +0530 Subject: [PATCH 03/35] Change generated sources directory --- appinventor/common/build.gradle | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/appinventor/common/build.gradle b/appinventor/common/build.gradle index bc7365ac85f..665a9e59830 100644 --- a/appinventor/common/build.gradle +++ b/appinventor/common/build.gradle @@ -8,7 +8,6 @@ sourceSets { commonUtils { java { srcDirs = ['src/com/google/appinventor/common/utils/'] - // TODO: compiledBy } // TODO: breaks when commonUtils & commonVersion both have same resources dir // resources { @@ -20,7 +19,7 @@ sourceSets { java { srcDirs = [ 'src/com/google/appinventor/common/version/', - "$buildDir/gen/src/com/google/appinventor/common/version/" + "$buildDir/generated/src/com/google/appinventor/common/version/" ] } // TODO: see above @@ -39,7 +38,7 @@ defaultTasks 'CommonUtilsJar', 'CommonUtilsGwtJar', 'CommonVersionJar', 'CommonV task GitBuildId(type: Copy) { from 'GitBuildId.template' - into "$buildDir/gen/src/com/google/appinventor/common/version/" + into "$buildDir/generated/src/com/google/appinventor/common/version/" filter ReplaceTokens, tokens: [ "git.build.version" : 'git describe --dirty'.execute().text.trim(), From a05c31b69a2fd417aa3071bb723e0241912bad10 Mon Sep 17 00:00:00 2001 From: Pavitra Date: Fri, 24 Apr 2020 12:58:45 +0530 Subject: [PATCH 04/35] fix sourceset --- appinventor/components/build.gradle | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/appinventor/components/build.gradle b/appinventor/components/build.gradle index 944e50ad569..6860118e7bd 100644 --- a/appinventor/components/build.gradle +++ b/appinventor/components/build.gradle @@ -3,33 +3,42 @@ plugins { } sourceSets { - main { + runtime { java { - srcDirs = ['src/com/google/appinventor/components/runtime/'] + srcDirs = ['src'] + include 'com/google/appinventor/components/runtime/**/*.java' + } + } + annotations { + java { + srcDirs = ['src'] + include 'com/google/appinventor/components/annotations/**/*.java' } } commonConstants { java { - srcDirs = ['src/com/google/appinventor/components/common/'] - exclude 'HtmlEntities.java' + srcDirs = ['src'] + include 'com/google/appinventor/components/common/*.java' + exclude 'com/google/appinventor/components/common/HtmlEntities.java' } } htmlEntities { java { - srcDirs = ['src/com/google/appinventor/components/common/'] - include 'HtmlEntities.java' + srcDirs = ['src'] + include 'com/google/appinventor/components/common/HtmlEntities.java' } } barcodeLib { java { - srcDirs = ['src/com/google/zxing/client/android/'] + srcDirs = ['src'] + include 'com/google/zxing/client/android/**/*.java' } } } dependencies { barcodeLibCompileOnly files('../lib/QRGenerator/core.jar') - barcodeLibCompileOnly files('../lib/android/5.1.1/android.jar') + barcodeLibCompileOnly files('../lib/android/android-28/android.jar') } From 4faf65cef29743ef2a6c97585274f05813dc417b Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 00:06:48 +0530 Subject: [PATCH 05/35] gradle wrapper --- appinventor/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + appinventor/gradlew | 234 ++++++++++++++++++ appinventor/gradlew.bat | 89 +++++++ 4 files changed, 328 insertions(+) create mode 100644 appinventor/gradle/wrapper/gradle-wrapper.jar create mode 100644 appinventor/gradle/wrapper/gradle-wrapper.properties create mode 100644 appinventor/gradlew create mode 100644 appinventor/gradlew.bat diff --git a/appinventor/gradle/wrapper/gradle-wrapper.jar b/appinventor/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 zcma&NV|1p`(k7gaZQHhOJ9%QKV?D8LCmq{1JGRYE(y=?XJw0>InKkE~^UnAEs2gk5 zUVGPCwX3dOb!}xiFmPB95NK!+5D<~S0s;d1zn&lrfAn7 zC?Nb-LFlib|DTEqB8oDS5&$(u1<5;wsY!V`2F7^=IR@I9so5q~=3i_(hqqG<9SbL8Q(LqDrz+aNtGYWGJ2;p*{a-^;C>BfGzkz_@fPsK8{pTT~_VzB$E`P@> z7+V1WF2+tSW=`ZRj3&0m&d#x_lfXq`bb-Y-SC-O{dkN2EVM7@!n|{s+2=xSEMtW7( zz~A!cBpDMpQu{FP=y;sO4Le}Z)I$wuFwpugEY3vEGfVAHGqZ-<{vaMv-5_^uO%a{n zE_Zw46^M|0*dZ`;t%^3C19hr=8FvVdDp1>SY>KvG!UfD`O_@weQH~;~W=fXK_!Yc> z`EY^PDJ&C&7LC;CgQJeXH2 zjfM}2(1i5Syj)Jj4EaRyiIl#@&lC5xD{8hS4Wko7>J)6AYPC-(ROpVE-;|Z&u(o=X z2j!*>XJ|>Lo+8T?PQm;SH_St1wxQPz)b)Z^C(KDEN$|-6{A>P7r4J1R-=R7|FX*@! zmA{Ja?XE;AvisJy6;cr9Q5ovphdXR{gE_7EF`ji;n|RokAJ30Zo5;|v!xtJr+}qbW zY!NI6_Wk#6pWFX~t$rAUWi?bAOv-oL6N#1>C~S|7_e4 zF}b9(&a*gHk+4@J26&xpiWYf2HN>P;4p|TD4f586umA2t@cO1=Fx+qd@1Ae#Le>{-?m!PnbuF->g3u)7(n^llJfVI%Q2rMvetfV5 z6g|sGf}pV)3_`$QiKQnqQ<&ghOWz4_{`rA1+7*M0X{y(+?$|{n zs;FEW>YzUWg{sO*+D2l6&qd+$JJP_1Tm;To<@ZE%5iug8vCN3yH{!6u5Hm=#3HJ6J zmS(4nG@PI^7l6AW+cWAo9sFmE`VRcM`sP7X$^vQY(NBqBYU8B|n-PrZdNv8?K?kUTT3|IE`-A8V*eEM2=u*kDhhKsmVPWGns z8QvBk=BPjvu!QLtlF0qW(k+4i+?H&L*qf262G#fks9}D5-L{yiaD10~a;-j!p!>5K zl@Lh+(9D{ePo_S4F&QXv|q_yT`GIPEWNHDD8KEcF*2DdZD;=J6u z|8ICSoT~5Wd!>g%2ovFh`!lTZhAwpIbtchDc{$N%<~e$E<7GWsD42UdJh1fD($89f2on`W`9XZJmr*7lRjAA8K0!(t8-u>2H*xn5cy1EG{J;w;Q-H8Yyx+WW(qoZZM7p(KQx^2-yI6Sw?k<=lVOVwYn zY*eDm%~=|`c{tUupZ^oNwIr!o9T;H3Fr|>NE#By8SvHb&#;cyBmY1LwdXqZwi;qn8 zK+&z{{95(SOPXAl%EdJ3jC5yV^|^}nOT@M0)|$iOcq8G{#*OH7=DlfOb; z#tRO#tcrc*yQB5!{l5AF3(U4>e}nEvkoE_XCX=a3&A6Atwnr&`r&f2d%lDr8f?hBB zr1dKNypE$CFbT9I?n){q<1zHmY>C=5>9_phi79pLJG)f=#dKdQ7We8emMjwR*qIMF zE_P-T*$hX#FUa%bjv4Vm=;oxxv`B*`weqUn}K=^TXjJG=UxdFMSj-QV6fu~;- z|IsUq`#|73M%Yn;VHJUbt<0UHRzbaF{X@76=8*-IRx~bYgSf*H(t?KH=?D@wk*E{| z2@U%jKlmf~C^YxD=|&H?(g~R9-jzEb^y|N5d`p#2-@?BUcHys({pUz4Zto7XwKq2X zSB~|KQGgv_Mh@M!*{nl~2~VV_te&E7K39|WYH zCxfd|v_4!h$Ps2@atm+gj14Ru)DhivY&(e_`eA)!O1>nkGq|F-#-6oo5|XKEfF4hR z%{U%ar7Z8~B!foCd_VRHr;Z1c0Et~y8>ZyVVo9>LLi(qb^bxVkbq-Jq9IF7!FT`(- zTMrf6I*|SIznJLRtlP)_7tQ>J`Um>@pP=TSfaPB(bto$G1C zx#z0$=zNpP-~R);kM4O)9Mqn@5Myv5MmmXOJln312kq#_94)bpSd%fcEo7cD#&|<` zrcal$(1Xv(nDEquG#`{&9Ci~W)-zd_HbH-@2F6+|a4v}P!w!Q*h$#Zu+EcZeY>u&?hn#DCfC zVuye5@Ygr+T)0O2R1*Hvlt>%rez)P2wS}N-i{~IQItGZkp&aeY^;>^m7JT|O^{`78 z$KaK0quwcajja;LU%N|{`2o&QH@u%jtH+j!haGj;*ZCR*`UgOXWE>qpXqHc?g&vA& zt-?_g8k%ZS|D;()0Lf!>7KzTSo-8hUh%OA~i76HKRLudaNiwo*E9HxmzN4y>YpZNO zUE%Q|H_R_UmX=*f=2g=xyP)l-DP}kB@PX|(Ye$NOGN{h+fI6HVw`~Cd0cKqO;s6aiYLy7sl~%gs`~XaL z^KrZ9QeRA{O*#iNmB7_P!=*^pZiJ5O@iE&X2UmUCPz!)`2G3)5;H?d~3#P|)O(OQ_ zua+ZzwWGkWflk4j^Lb=x56M75_p9M*Q50#(+!aT01y80x#rs9##!;b-BH?2Fu&vx} za%4!~GAEDsB54X9wCF~juV@aU}fp_(a<`Ig0Pip8IjpRe#BR?-niYcz@jI+QY zBU9!8dAfq@%p;FX)X=E7?B=qJJNXlJ&7FBsz;4&|*z{^kEE!XbA)(G_O6I9GVzMAF z8)+Un(6od`W7O!!M=0Z)AJuNyN8q>jNaOdC-zAZ31$Iq%{c_SYZe+(~_R`a@ zOFiE*&*o5XG;~UjsuW*ja-0}}rJdd@^VnQD!z2O~+k-OSF%?hqcFPa4e{mV1UOY#J zTf!PM=KMNAzbf(+|AL%K~$ahX0Ol zbAxKu3;v#P{Qia{_WzHl`!@!8c#62XSegM{tW1nu?Ee{sQq(t{0TSq67YfG;KrZ$n z*$S-+R2G?aa*6kRiTvVxqgUhJ{ASSgtepG3hb<3hlM|r>Hr~v_DQ>|Nc%&)r0A9go z&F3Ao!PWKVq~aWOzLQIy&R*xo>}{UTr}?`)KS&2$3NR@a+>+hqK*6r6Uu-H};ZG^| zfq_Vl%YE1*uGwtJ>H*Y(Q9E6kOfLJRlrDNv`N;jnag&f<4#UErM0ECf$8DASxMFF& zK=mZgu)xBz6lXJ~WZR7OYw;4&?v3Kk-QTs;v1r%XhgzSWVf|`Sre2XGdJb}l1!a~z zP92YjnfI7OnF@4~g*LF>G9IZ5c+tifpcm6#m)+BmnZ1kz+pM8iUhwag`_gqr(bnpy zl-noA2L@2+?*7`ZO{P7&UL~ahldjl`r3=HIdo~Hq#d+&Q;)LHZ4&5zuDNug@9-uk; z<2&m#0Um`s=B}_}9s&70Tv_~Va@WJ$n~s`7tVxi^s&_nPI0`QX=JnItlOu*Tn;T@> zXsVNAHd&K?*u~a@u8MWX17VaWuE0=6B93P2IQ{S$-WmT+Yp!9eA>@n~=s>?uDQ4*X zC(SxlKap@0R^z1p9C(VKM>nX8-|84nvIQJ-;9ei0qs{}X>?f%&E#%-)Bpv_p;s4R+ z;PMpG5*rvN&l;i{^~&wKnEhT!S!LQ>udPzta#Hc9)S8EUHK=%x+z@iq!O{)*XM}aI zBJE)vokFFXTeG<2Pq}5Na+kKnu?Ch|YoxdPb&Z{07nq!yzj0=xjzZj@3XvwLF0}Pa zn;x^HW504NNfLY~w!}5>`z=e{nzGB>t4ntE>R}r7*hJF3OoEx}&6LvZz4``m{AZxC zz6V+^73YbuY>6i9ulu)2`ozP(XBY5n$!kiAE_Vf4}Ih)tlOjgF3HW|DF+q-jI_0p%6Voc^e;g28* z;Sr4X{n(X7eEnACWRGNsHqQ_OfWhAHwnSQ87@PvPcpa!xr9`9+{QRn;bh^jgO8q@v zLekO@-cdc&eOKsvXs-eMCH8Y{*~3Iy!+CANy+(WXYS&6XB$&1+tB?!qcL@@) zS7XQ|5=o1fr8yM7r1AyAD~c@Mo`^i~hjx{N17%pDX?j@2bdBEbxY}YZxz!h#)q^1x zpc_RnoC3`V?L|G2R1QbR6pI{Am?yW?4Gy`G-xBYfebXvZ=(nTD7u?OEw>;vQICdPJBmi~;xhVV zisVvnE!bxI5|@IIlDRolo_^tc1{m)XTbIX^<{TQfsUA1Wv(KjJED^nj`r!JjEA%MaEGqPB z9YVt~ol3%e`PaqjZt&-)Fl^NeGmZ)nbL;92cOeLM2H*r-zA@d->H5T_8_;Jut0Q_G zBM2((-VHy2&eNkztIpHk&1H3M3@&wvvU9+$RO%fSEa_d5-qZ!<`-5?L9lQ1@AEpo* z3}Zz~R6&^i9KfRM8WGc6fTFD%PGdruE}`X$tP_*A)_7(uI5{k|LYc-WY*%GJ6JMmw zNBT%^E#IhekpA(i zcB$!EB}#>{^=G%rQ~2;gbObT9PQ{~aVx_W6?(j@)S$&Ja1s}aLT%A*mP}NiG5G93- z_DaRGP77PzLv0s32{UFm##C2LsU!w{vHdKTM1X)}W%OyZ&{3d^2Zu-zw?fT=+zi*q z^fu6CXQ!i?=ljsqSUzw>g#PMk>(^#ejrYp(C)7+@Z1=Mw$Rw!l8c9}+$Uz;9NUO(kCd#A1DX4Lbis0k; z?~pO(;@I6Ajp}PL;&`3+;OVkr3A^dQ(j?`by@A!qQam@_5(w6fG>PvhO`#P(y~2ue zW1BH_GqUY&>PggMhhi@8kAY;XWmj>y1M@c`0v+l~l0&~Kd8ZSg5#46wTLPo*Aom-5 z>qRXyWl}Yda=e@hJ%`x=?I42(B0lRiR~w>n6p8SHN~B6Y>W(MOxLpv>aB)E<1oEcw z%X;#DJpeDaD;CJRLX%u!t23F|cv0ZaE183LXxMq*uWn)cD_ zp!@i5zsmcxb!5uhp^@>U;K>$B|8U@3$65CmhuLlZ2(lF#hHq-<<+7ZN9m3-hFAPgA zKi;jMBa*59ficc#TRbH_l`2r>z(Bm_XEY}rAwyp~c8L>{A<0@Q)j*uXns^q5z~>KI z)43=nMhcU1ZaF;CaBo>hl6;@(2#9yXZ7_BwS4u>gN%SBS<;j{{+p}tbD8y_DFu1#0 zx)h&?`_`=ti_6L>VDH3>PPAc@?wg=Omdoip5j-2{$T;E9m)o2noyFW$5dXb{9CZ?c z);zf3U526r3Fl+{82!z)aHkZV6GM@%OKJB5mS~JcDjieFaVn}}M5rtPnHQVw0Stn- zEHs_gqfT8(0b-5ZCk1%1{QQaY3%b>wU z7lyE?lYGuPmB6jnMI6s$1uxN{Tf_n7H~nKu+h7=%60WK-C&kEIq_d4`wU(*~rJsW< zo^D$-(b0~uNVgC+$J3MUK)(>6*k?92mLgpod{Pd?{os+yHr&t+9ZgM*9;dCQBzE!V zk6e6)9U6Bq$^_`E1xd}d;5O8^6?@bK>QB&7l{vAy^P6FOEO^l7wK4K=lLA45gQ3$X z=$N{GR1{cxO)j;ZxKI*1kZIT9p>%FhoFbRK;M(m&bL?SaN zzkZS9xMf={o@gpG%wE857u@9dq>UKvbaM1SNtMA9EFOp7$BjJQVkIm$wU?-yOOs{i z1^(E(WwZZG{_#aIzfpGc@g5-AtK^?Q&vY#CtVpfLbW?g0{BEX4Vlk(`AO1{-D@31J zce}#=$?Gq+FZG-SD^z)-;wQg9`qEO}Dvo+S9*PUB*JcU)@S;UVIpN7rOqXmEIerWo zP_lk!@RQvyds&zF$Rt>N#_=!?5{XI`Dbo0<@>fIVgcU*9Y+ z)}K(Y&fdgve3ruT{WCNs$XtParmvV;rjr&R(V&_#?ob1LzO0RW3?8_kSw)bjom#0; zeNllfz(HlOJw012B}rgCUF5o|Xp#HLC~of%lg+!pr(g^n;wCX@Yk~SQOss!j9f(KL zDiI1h#k{po=Irl)8N*KU*6*n)A8&i9Wf#7;HUR^5*6+Bzh;I*1cICa|`&`e{pgrdc zs}ita0AXb$c6{tu&hxmT0faMG0GFc)unG8tssRJd%&?^62!_h_kn^HU_kBgp$bSew zqu)M3jTn;)tipv9Wt4Ll#1bmO2n?^)t^ZPxjveoOuK89$oy4(8Ujw{nd*Rs*<+xFi z{k*9v%sl?wS{aBSMMWdazhs0#gX9Has=pi?DhG&_0|cIyRG7c`OBiVG6W#JjYf7-n zIQU*Jc+SYnI8oG^Q8So9SP_-w;Y00$p5+LZ{l+81>v7|qa#Cn->312n=YQd$PaVz8 zL*s?ZU*t-RxoR~4I7e^c!8TA4g>w@R5F4JnEWJpy>|m5la2b#F4d*uoz!m=i1;`L` zB(f>1fAd~;*wf%GEbE8`EA>IO9o6TdgbIC%+en!}(C5PGYqS0{pa?PD)5?ds=j9{w za9^@WBXMZ|D&(yfc~)tnrDd#*;u;0?8=lh4%b-lFPR3ItwVJp};HMdEw#SXg>f-zU zEiaj5H=jzRSy(sWVd%hnLZE{SUj~$xk&TfheSch#23)YTcjrB+IVe0jJqsdz__n{- zC~7L`DG}-Dgrinzf7Jr)e&^tdQ}8v7F+~eF*<`~Vph=MIB|YxNEtLo1jXt#9#UG5` zQ$OSk`u!US+Z!=>dGL>%i#uV<5*F?pivBH@@1idFrzVAzttp5~>Y?D0LV;8Yv`wAa{hewVjlhhBM z_mJhU9yWz9Jexg@G~dq6EW5^nDXe(sU^5{}qbd0*yW2Xq6G37f8{{X&Z>G~dUGDFu zgmsDDZZ5ZmtiBw58CERFPrEG>*)*`_B75!MDsOoK`T1aJ4GZ1avI?Z3OX|Hg?P(xy zSPgO$alKZuXd=pHP6UZy0G>#BFm(np+dekv0l6gd=36FijlT8^kI5; zw?Z*FPsibF2d9T$_L@uX9iw*>y_w9HSh8c=Rm}f>%W+8OS=Hj_wsH-^actull3c@!z@R4NQ4qpytnwMaY z)>!;FUeY?h2N9tD(othc7Q=(dF zZAX&Y1ac1~0n(z}!9{J2kPPnru1?qteJPvA2m!@3Zh%+f1VQt~@leK^$&ZudOpS!+ zw#L0usf!?Df1tB?9=zPZ@q2sG!A#9 zKZL`2cs%|Jf}wG=_rJkwh|5Idb;&}z)JQuMVCZSH9kkG%zvQO01wBN)c4Q`*xnto3 zi7TscilQ>t_SLij{@Fepen*a(`upw#RJAx|JYYXvP1v8f)dTHv9pc3ZUwx!0tOH?c z^Hn=gfjUyo!;+3vZhxNE?LJgP`qYJ`J)umMXT@b z{nU(a^xFfofcxfHN-!Jn*{Dp5NZ&i9#9r{)s^lUFCzs5LQL9~HgxvmU#W|iNs0<3O z%Y2FEgvts4t({%lfX1uJ$w{JwfpV|HsO{ZDl2|Q$-Q?UJd`@SLBsMKGjFFrJ(s?t^ z2Llf`deAe@YaGJf)k2e&ryg*m8R|pcjct@rOXa=64#V9!sp=6tC#~QvYh&M~zmJ;% zr*A}V)Ka^3JE!1pcF5G}b&jdrt;bM^+J;G^#R08x@{|ZWy|547&L|k6)HLG|sN<~o z?y`%kbfRN_vc}pwS!Zr}*q6DG7;be0qmxn)eOcD%s3Wk`=@GM>U3ojhAW&WRppi0e zudTj{ufwO~H7izZJmLJD3uPHtjAJvo6H=)&SJ_2%qRRECN#HEU_RGa(Pefk*HIvOH zW7{=Tt(Q(LZ6&WX_Z9vpen}jqge|wCCaLYpiw@f_%9+-!l{kYi&gT@Cj#D*&rz1%e z@*b1W13bN8^j7IpAi$>`_0c!aVzLe*01DY-AcvwE;kW}=Z{3RJLR|O~^iOS(dNEnL zJJ?Dv^ab++s2v!4Oa_WFDLc4fMspglkh;+vzg)4;LS{%CR*>VwyP4>1Tly+!fA-k? z6$bg!*>wKtg!qGO6GQ=cAmM_RC&hKg$~(m2LdP{{*M+*OVf07P$OHp*4SSj9H;)1p z^b1_4p4@C;8G7cBCB6XC{i@vTB3#55iRBZiml^jc4sYnepCKUD+~k}TiuA;HWC6V3 zV{L5uUAU9CdoU+qsFszEwp;@d^!6XnX~KI|!o|=r?qhs`(-Y{GfO4^d6?8BC0xonf zKtZc1C@dNu$~+p#m%JW*J7alfz^$x`U~)1{c7svkIgQ3~RK2LZ5;2TAx=H<4AjC8{ z;)}8OfkZy7pSzVsdX|wzLe=SLg$W1+`Isf=o&}npxWdVR(i8Rr{uzE516a@28VhVr zVgZ3L&X(Q}J0R2{V(}bbNwCDD5K)<5h9CLM*~!xmGTl{Mq$@;~+|U*O#nc^oHnFOy z9Kz%AS*=iTBY_bSZAAY6wXCI?EaE>8^}WF@|}O@I#i69ljjWQPBJVk zQ_rt#J56_wGXiyItvAShJpLEMtW_)V5JZAuK#BAp6bV3K;IkS zK0AL(3ia99!vUPL#j>?<>mA~Q!mC@F-9I$9Z!96ZCSJO8FDz1SP3gF~m`1c#y!efq8QN}eHd+BHwtm%M5586jlU8&e!CmOC z^N_{YV$1`II$~cTxt*dV{-yp61nUuX5z?N8GNBuZZR}Uy_Y3_~@Y3db#~-&0TX644OuG^D3w_`?Yci{gTaPWST8`LdE)HK5OYv>a=6B%R zw|}>ngvSTE1rh`#1Rey0?LXTq;bCIy>TKm^CTV4BCSqdpx1pzC3^ca*S3fUBbKMzF z6X%OSdtt50)yJw*V_HE`hnBA)1yVN3Ruq3l@lY;%Bu+Q&hYLf_Z@fCUVQY-h4M3)- zE_G|moU)Ne0TMjhg?tscN7#ME6!Rb+y#Kd&-`!9gZ06o3I-VX1d4b1O=bpRG-tDK0 zSEa9y46s7QI%LmhbU3P`RO?w#FDM(}k8T`&>OCU3xD=s5N7}w$GntXF;?jdVfg5w9OR8VPxp5{uw zD+_;Gb}@7Vo_d3UV7PS65%_pBUeEwX_Hwfe2e6Qmyq$%0i8Ewn%F7i%=CNEV)Qg`r|&+$ zP6^Vl(MmgvFq`Zb715wYD>a#si;o+b4j^VuhuN>+sNOq6Qc~Y;Y=T&!Q4>(&^>Z6* zwliz!_16EDLTT;v$@W(s7s0s zi*%p>q#t)`S4j=Ox_IcjcllyT38C4hr&mlr6qX-c;qVa~k$MG;UqdnzKX0wo0Xe-_)b zrHu1&21O$y5828UIHI@N;}J@-9cpxob}zqO#!U%Q*ybZ?BH#~^fOT_|8&xAs_rX24 z^nqn{UWqR?MlY~klh)#Rz-*%&e~9agOg*fIN`P&v!@gcO25Mec23}PhzImkdwVT|@ zFR9dYYmf&HiUF4xO9@t#u=uTBS@k*97Z!&hu@|xQnQDkLd!*N`!0JN7{EUoH%OD85 z@aQ2(w-N)1_M{;FV)C#(a4p!ofIA3XG(XZ2E#%j_(=`IWlJAHWkYM2&(+yY|^2TB0 z>wfC-+I}`)LFOJ%KeBb1?eNxGKeq?AI_eBE!M~$wYR~bB)J3=WvVlT8ZlF2EzIFZt zkaeyj#vmBTGkIL9mM3cEz@Yf>j=82+KgvJ-u_{bBOxE5zoRNQW3+Ahx+eMGem|8xo zL3ORKxY_R{k=f~M5oi-Z>5fgqjEtzC&xJEDQ@`<)*Gh3UsftBJno-y5Je^!D?Im{j za*I>RQ=IvU@5WKsIr?kC$DT+2bgR>8rOf3mtXeMVB~sm%X7W5`s=Tp>FR544tuQ>9qLt|aUSv^io&z93luW$_OYE^sf8DB?gx z4&k;dHMWph>Z{iuhhFJr+PCZ#SiZ9e5xM$A#0yPtVC>yk&_b9I676n|oAH?VeTe*1 z@tDK}QM-%J^3Ns6=_vh*I8hE?+=6n9nUU`}EX|;Mkr?6@NXy8&B0i6h?7%D=%M*Er zivG61Wk7e=v;<%t*G+HKBqz{;0Biv7F+WxGirONRxJij zon5~(a`UR%uUzfEma99QGbIxD(d}~oa|exU5Y27#4k@N|=hE%Y?Y3H%rcT zHmNO#ZJ7nPHRG#y-(-FSzaZ2S{`itkdYY^ZUvyw<7yMBkNG+>$Rfm{iN!gz7eASN9-B3g%LIEyRev|3)kSl;JL zX7MaUL_@~4ot3$woD0UA49)wUeu7#lj77M4ar8+myvO$B5LZS$!-ZXw3w;l#0anYz zDc_RQ0Ome}_i+o~H=CkzEa&r~M$1GC!-~WBiHiDq9Sdg{m|G?o7g`R%f(Zvby5q4; z=cvn`M>RFO%i_S@h3^#3wImmWI4}2x4skPNL9Am{c!WxR_spQX3+;fo!y(&~Palyjt~Xo0uy6d%sX&I`e>zv6CRSm)rc^w!;Y6iVBb3x@Y=`hl9jft zXm5vilB4IhImY5b->x{!MIdCermpyLbsalx8;hIUia%*+WEo4<2yZ6`OyG1Wp%1s$ zh<|KrHMv~XJ9dC8&EXJ`t3ETz>a|zLMx|MyJE54RU(@?K&p2d#x?eJC*WKO9^d17# zdTTKx-Os3k%^=58Sz|J28aCJ}X2-?YV3T7ee?*FoDLOC214J4|^*EX`?cy%+7Kb3(@0@!Q?p zk>>6dWjF~y(eyRPqjXqDOT`4^Qv-%G#Zb2G?&LS-EmO|ixxt79JZlMgd^~j)7XYQ; z62rGGXA=gLfgy{M-%1gR87hbhxq-fL)GSfEAm{yLQP!~m-{4i_jG*JsvUdqAkoc#q6Yd&>=;4udAh#?xa2L z7mFvCjz(hN7eV&cyFb%(U*30H@bQ8-b7mkm!=wh2|;+_4vo=tyHPQ0hL=NR`jbsSiBWtG ztMPPBgHj(JTK#0VcP36Z`?P|AN~ybm=jNbU=^3dK=|rLE+40>w+MWQW%4gJ`>K!^- zx4kM*XZLd(E4WsolMCRsdvTGC=37FofIyCZCj{v3{wqy4OXX-dZl@g`Dv>p2`l|H^ zS_@(8)7gA62{Qfft>vx71stILMuyV4uKb7BbCstG@|e*KWl{P1$=1xg(7E8MRRCWQ1g)>|QPAZot~|FYz_J0T+r zTWTB3AatKyUsTXR7{Uu) z$1J5SSqoJWt(@@L5a)#Q6bj$KvuC->J-q1!nYS6K5&e7vNdtj- zj9;qwbODLgIcObqNRGs1l{8>&7W?BbDd!87=@YD75B2ep?IY|gE~t)$`?XJ45MG@2 zz|H}f?qtEb_p^Xs$4{?nA=Qko3Lc~WrAS`M%9N60FKqL7XI+v_5H-UDiCbRm`fEmv z$pMVH*#@wQqml~MZe+)e4Ts3Gl^!Z0W3y$;|9hI?9(iw29b7en0>Kt2pjFXk@!@-g zTb4}Kw!@u|V!wzk0|qM*zj$*-*}e*ZXs#Y<6E_!BR}3^YtjI_byo{F+w9H9?f%mnBh(uE~!Um7)tgp2Ye;XYdVD95qt1I-fc@X zXHM)BfJ?^g(s3K|{N8B^hamrWAW|zis$`6|iA>M-`0f+vq(FLWgC&KnBDsM)_ez1# zPCTfN8{s^K`_bum2i5SWOn)B7JB0tzH5blC?|x;N{|@ch(8Uy-O{B2)OsfB$q0@FR z27m3YkcVi$KL;;4I*S;Z#6VfZcZFn!D2Npv5pio)sz-`_H*#}ROd7*y4i(y(YlH<4 zh4MmqBe^QV_$)VvzWgMXFy`M(vzyR2u!xx&%&{^*AcVLrGa8J9ycbynjKR~G6zC0e zlEU>zt7yQtMhz>XMnz>ewXS#{Bulz$6HETn?qD5v3td>`qGD;Y8&RmkvN=24=^6Q@DYY zxMt}uh2cSToMkkIWo1_Lp^FOn$+47JXJ*#q=JaeiIBUHEw#IiXz8cStEsw{UYCA5v_%cF@#m^Y!=+qttuH4u}r6gMvO4EAvjBURtLf& z6k!C|OU@hv_!*qear3KJ?VzVXDKqvKRtugefa7^^MSWl0fXXZR$Xb!b6`eY4A1#pk zAVoZvb_4dZ{f~M8fk3o?{xno^znH1t;;E6K#9?erW~7cs%EV|h^K>@&3Im}c7nm%Y zbLozFrwM&tSNp|46)OhP%MJ(5PydzR>8)X%i3!^L%3HCoCF#Y0#9vPI5l&MK*_ z6G8Y>$`~c)VvQle_4L_AewDGh@!bKkJeEs_NTz(yilnM!t}7jz>fmJb89jQo6~)%% z@GNIJ@AShd&K%UdQ5vR#yT<-goR+D@Tg;PuvcZ*2AzSWN&wW$Xc+~vW)pww~O|6hL zBxX?hOyA~S;3rAEfI&jmMT4f!-eVm%n^KF_QT=>!A<5tgXgi~VNBXqsFI(iI$Tu3x0L{<_-%|HMG4Cn?Xs zq~fvBhu;SDOCD7K5(l&i7Py-;Czx5byV*3y%#-Of9rtz?M_owXc2}$OIY~)EZ&2?r zLQ(onz~I7U!w?B%LtfDz)*X=CscqH!UE=mO?d&oYvtj|(u)^yomS;Cd>Men|#2yuD zg&tf(*iSHyo;^A03p&_j*QXay9d}qZ0CgU@rnFNDIT5xLhC5_tlugv()+w%`7;ICf z>;<#L4m@{1}Og76*e zHWFm~;n@B1GqO8s%=qu)+^MR|jp(ULUOi~v;wE8SB6^mK@adSb=o+A_>Itjn13AF& zDZe+wUF9G!JFv|dpj1#d+}BO~s*QTe3381TxA%Q>P*J#z%( z5*8N^QWxgF73^cTKkkvgvIzf*cLEyyKw)Wf{#$n{uS#(rAA~>TS#!asqQ2m_izXe3 z7$Oh=rR;sdmVx3G)s}eImsb<@r2~5?vcw*Q4LU~FFh!y4r*>~S7slAE6)W3Up2OHr z2R)+O<0kKo<3+5vB}v!lB*`%}gFldc+79iahqEx#&Im@NCQU$@PyCZbcTt?K{;o@4 z312O9GB)?X&wAB}*-NEU zn@6`)G`FhT8O^=Cz3y+XtbwO{5+{4-&?z!esFts-C zypwgI^4#tZ74KC+_IW|E@kMI=1pSJkvg$9G3Va(!reMnJ$kcMiZ=30dTJ%(Ws>eUf z;|l--TFDqL!PZbLc_O(XP0QornpP;!)hdT#Ts7tZ9fcQeH&rhP_1L|Z_ha#JOroe^qcsLi`+AoBWHPM7}gD z+mHuPXd14M?nkp|nu9G8hPk;3=JXE-a204Fg!BK|$MX`k-qPeD$2OOqvF;C(l8wm13?>i(pz7kRyYm zM$IEzf`$}B%ezr!$(UO#uWExn%nTCTIZzq&8@i8sP#6r8 z*QMUzZV(LEWZb)wbmf|Li;UpiP;PlTQ(X4zreD`|`RG!7_wc6J^MFD!A=#K*ze>Jg z?9v?p(M=fg_VB0+c?!M$L>5FIfD(KD5ku*djwCp+5GVIs9^=}kM2RFsxx0_5DE%BF zykxwjWvs=rbi4xKIt!z$&v(`msFrl4n>a%NO_4`iSyb!UiAE&mDa+apc zPe)#!ToRW~rqi2e1bdO1RLN5*uUM@{S`KLJhhY-@TvC&5D(c?a(2$mW-&N%h5IfEM zdFI6`6KJiJQIHvFiG-34^BtO3%*$(-Ht_JU*(KddiUYoM{coadlG&LVvke&*p>Cac z^BPy2Zteiq1@ulw0e)e*ot7@A$RJui0$l^{lsCt%R;$){>zuRv9#w@;m=#d%%TJmm zC#%eFOoy$V)|3*d<OC1iP+4R7D z8FE$E8l2Y?(o-i6wG=BKBh0-I?i3WF%hqdD7VCd;vpk|LFP!Et8$@voH>l>U8BY`Q zC*G;&y6|!p=7`G$*+hxCv!@^#+QD3m>^azyZoLS^;o_|plQaj-wx^ zRV&$HcY~p)2|Zqp0SYU?W3zV87s6JP-@D~$t0 zvd;-YL~JWc*8mtHz_s(cXus#XYJc5zdC=&!4MeZ;N3TQ>^I|Pd=HPjVP*j^45rs(n zzB{U4-44=oQ4rNN6@>qYVMH4|GmMIz#z@3UW-1_y#eNa+Q%(41oJ5i(DzvMO^%|?L z^r_+MZtw0DZ0=BT-@?hUtA)Ijk~Kh-N8?~X5%KnRH7cb!?Yrd8gtiEo!v{sGrQk{X zvV>h{8-DqTyuAxIE(hb}jMVtga$;FIrrKm>ye5t%M;p!jcH1(Bbux>4D#MVhgZGd> z=c=nVb%^9T?iDgM&9G(mV5xShc-lBLi*6RShenDqB%`-2;I*;IHg6>#ovKQ$M}dDb z<$USN%LMqa5_5DR7g7@(oAoQ%!~<1KSQr$rmS{UFQJs5&qBhgTEM_Y7|0Wv?fbP`z z)`8~=v;B)+>Jh`V*|$dTxKe`HTBkho^-!!K#@i{9FLn-XqX&fQcGsEAXp)BV7(`Lk zC{4&+Pe-0&<)C0kAa(MTnb|L;ZB5i|b#L1o;J)+?SV8T*U9$Vxhy}dm3%!A}SK9l_6(#5(e*>8|;4gNKk7o_%m_ zEaS=Z(ewk}hBJ>v`jtR=$pm_Wq3d&DU+6`BACU4%qdhH1o^m8hT2&j<4Z8!v=rMCk z-I*?48{2H*&+r<{2?wp$kh@L@=rj8c`EaS~J>W?)trc?zP&4bsNagS4yafuDoXpi5`!{BVqJ1$ZC3`pf$`LIZ(`0&Ik+!_Xa=NJW`R2 zd#Ntgwz`JVwC4A61$FZ&kP)-{T|rGO59`h#1enAa`cWxRR8bKVvvN6jBzAYePrc&5 z+*zr3en|LYB2>qJp479rEALk5d*X-dfKn6|kuNm;2-U2+P3_rma!nWjZQ-y*q3JS? zBE}zE-!1ZBR~G%v!$l#dZ*$UV4$7q}xct}=on+Ba8{b>Y9h*f-GW0D0o#vJ0%ALg( ztG2+AjWlG#d;myA(i&dh8Gp?y9HD@`CTaDAy?c&0unZ%*LbLIg4;m{Kc?)ws3^>M+ zt5>R)%KIJV*MRUg{0$#nW=Lj{#8?dD$yhjBOrAeR#4$H_Dc(eyA4dNjZEz1Xk+Bqt zB&pPl+?R{w8GPv%VI`x`IFOj320F1=cV4aq0(*()Tx!VVxCjua;)t}gTr=b?zY+U! zkb}xjXZ?hMJN{Hjw?w&?gz8Ow`htX z@}WG*_4<%ff8(!S6bf3)p+8h2!Rory>@aob$gY#fYJ=LiW0`+~l7GI%EX_=8 z{(;0&lJ%9)M9{;wty=XvHbIx|-$g4HFij`J$-z~`mW)*IK^MWVN+*>uTNqaDmi!M8 zurj6DGd)g1g(f`A-K^v)3KSOEoZXImXT06apJum-dO_%oR)z6Bam-QC&CNWh7kLOE zcxLdVjYLNO2V?IXWa-ys30Jbxw(Xm?U1{4kDs9`gZQHh8X{*w9=H&Zz&-6RL?uq#R zxN+k~JaL|gdsdvY_u6}}MHC?a@ElFeipA1Lud#M~)pp2SnG#K{a@tSpvXM;A8gz9> zRVDV5T1%%!LsNRDOw~LIuiAiKcj<%7WpgjP7G6mMU1#pFo6a-1>0I5ZdhxnkMX&#L z=Vm}?SDlb_LArobqpnU!WLQE*yVGWgs^4RRy4rrJwoUUWoA~ZJUx$mK>J6}7{CyC4 zv=8W)kKl7TmAnM%m;anEDPv5tzT{A{ON9#FPYF6c=QIc*OrPp96tiY&^Qs+#A1H>Y z<{XtWt2eDwuqM zQ_BI#UIP;2-olOL4LsZ`vTPv-eILtuB7oWosoSefWdM}BcP>iH^HmimR`G`|+9waCO z&M375o@;_My(qYvPNz;N8FBZaoaw3$b#x`yTBJLc8iIP z--la{bzK>YPP|@Mke!{Km{vT8Z4|#An*f=EmL34?!GJfHaDS#41j~8c5KGKmj!GTh&QIH+DjEI*BdbSS2~6VTt}t zhAwNQNT6%c{G`If3?|~Fp7iwee(LaUS)X9@I29cIb61} z$@YBq4hSplr&liE@ye!y&7+7n$fb+8nS~co#^n@oCjCwuKD61x$5|0ShDxhQES5MP z(gH|FO-s6#$++AxnkQR!3YMgKcF)!&aqr^a3^{gAVT`(tY9@tqgY7@ z>>ul3LYy`R({OY7*^Mf}UgJl(N7yyo$ag;RIpYHa_^HKx?DD`%Vf1D0s^ zjk#OCM5oSzuEz(7X`5u~C-Y~n4B}_3*`5B&8tEdND@&h;H{R`o%IFpIJ4~Kw!kUjehGT8W!CD7?d8sg_$KKp%@*dW)#fI1#R<}kvzBVpaog_2&W%c_jJfP` z6)wE+$3+Hdn^4G}(ymPyasc1<*a7s2yL%=3LgtZLXGuA^jdM^{`KDb%%}lr|ONDsl zy~~jEuK|XJ2y<`R{^F)Gx7DJVMvpT>gF<4O%$cbsJqK1;v@GKXm*9l3*~8^_xj*Gs z=Z#2VQ6`H@^~#5Pv##@CddHfm;lbxiQnqy7AYEH(35pTg^;u&J2xs-F#jGLuDw2%z z`a>=0sVMM+oKx4%OnC9zWdbpq*#5^yM;og*EQKpv`^n~-mO_vj=EgFxYnga(7jO?G z`^C87B4-jfB_RgN2FP|IrjOi;W9AM1qS}9W@&1a9Us>PKFQ9~YE!I~wTbl!m3$Th? z)~GjFxmhyyGxN}t*G#1^KGVXm#o(K0xJyverPe}mS=QgJ$#D}emQDw+dHyPu^&Uv> z4O=3gK*HLFZPBY|!VGq60Of6QrAdj`nj1h!$?&a;Hgaj{oo{l0P3TzpJK_q_eW8Ng zP6QF}1{V;xlolCs?pGegPoCSxx@bshb#3ng4Fkp4!7B0=&+1%187izf@}tvsjZ6{m z4;K>sR5rm97HJrJ`w}Y`-MZN$Wv2N%X4KW(N$v2@R1RkRJH2q1Ozs0H`@ zd5)X-{!{<+4Nyd=hQ8Wm3CCd}ujm*a?L79ztfT7@&(?B|!pU5&%9Rl!`i;suAg0+A zxb&UYpo-z}u6CLIndtH~C|yz&!OV_I*L;H#C7ie_5uB1fNRyH*<^d=ww=gxvE%P$p zRHKI{^{nQlB9nLhp9yj-so1is{4^`{Xd>Jl&;dX;J)#- z=fmE5GiV?-&3kcjM1+XG7&tSq;q9Oi4NUuRrIpoyp*Fn&nVNFdUuGQ_g)g>VzXGdneB7`;!aTUE$t* z5iH+8XPxrYl)vFo~+vmcU-2) zq!6R(T0SsoDnB>Mmvr^k*{34_BAK+I=DAGu){p)(ndZqOFT%%^_y;X(w3q-L``N<6 zw9=M zoQ8Lyp>L_j$T20UUUCzYn2-xdN}{e@$8-3vLDN?GbfJ>7*qky{n!wC#1NcYQr~d51 zy;H!am=EI#*S&TCuP{FA3CO)b0AAiN*tLnDbvKwxtMw-l;G2T@EGH)YU?-B`+Y=!$ zypvDn@5V1Tr~y~U0s$ee2+CL3xm_BmxD3w}d_Pd@S%ft#v~_j;6sC6cy%E|dJy@wj z`+(YSh2CrXMxI;yVy*=O@DE2~i5$>nuzZ$wYHs$y`TAtB-ck4fQ!B8a;M=CxY^Nf{ z+UQhn0jopOzvbl(uZZ1R-(IFaprC$9hYK~b=57@ zAJ8*pH%|Tjotzu5(oxZyCQ{5MAw+6L4)NI!9H&XM$Eui-DIoDa@GpNI=I4}m>Hr^r zZjT?xDOea}7cq+TP#wK1p3}sbMK{BV%(h`?R#zNGIP+7u@dV5#zyMau+w}VC1uQ@p zrFUjrJAx6+9%pMhv(IOT52}Dq{B9njh_R`>&j&5Sbub&r*hf4es)_^FTYdDX$8NRk zMi=%I`)hN@N9>X&Gu2RmjKVsUbU>TRUM`gwd?CrL*0zxu-g#uNNnnicYw=kZ{7Vz3 zULaFQ)H=7%Lm5|Z#k?<{ux{o4T{v-e zTLj?F(_qp{FXUzOfJxEyKO15Nr!LQYHF&^jMMBs z`P-}WCyUYIv>K`~)oP$Z85zZr4gw>%aug1V1A)1H(r!8l&5J?ia1x_}Wh)FXTxZUE zs=kI}Ix2cK%Bi_Hc4?mF^m`sr6m8M(n?E+k7Tm^Gn}Kf= zfnqoyVU^*yLypz?s+-XV5(*oOBwn-uhwco5b(@B(hD|vtT8y7#W{>RomA_KchB&Cd zcFNAD9mmqR<341sq+j+2Ra}N5-3wx5IZqg6Wmi6CNO#pLvYPGNER}Q8+PjvIJ42|n zc5r@T*p)R^U=d{cT2AszQcC6SkWiE|hdK)m{7ul^mU+ED1R8G#)#X}A9JSP_ubF5p z8Xxcl;jlGjPwow^p+-f_-a~S;$lztguPE6SceeUCfmRo=Qg zKHTY*O_ z;pXl@z&7hniVYVbGgp+Nj#XP^Aln2T!D*{(Td8h{8Dc?C)KFfjPybiC`Va?Rf)X>y z;5?B{bAhPtbmOMUsAy2Y0RNDQ3K`v`gq)#ns_C&ec-)6cq)d^{5938T`Sr@|7nLl; zcyewuiSUh7Z}q8iIJ@$)L3)m)(D|MbJm_h&tj^;iNk%7K-YR}+J|S?KR|29K?z-$c z<+C4uA43yfSWBv*%z=-0lI{ev`C6JxJ};A5N;lmoR(g{4cjCEn33 z-ef#x^uc%cM-f^_+*dzE?U;5EtEe;&8EOK^K}xITa?GH`tz2F9N$O5;)`Uof4~l+t z#n_M(KkcVP*yMYlk_~5h89o zlf#^qjYG8Wovx+f%x7M7_>@r7xaXa2uXb?_*=QOEe_>ErS(v5-i)mrT3&^`Oqr4c9 zDjP_6T&NQMD`{l#K&sHTm@;}ed_sQ88X3y`ON<=$<8Qq{dOPA&WAc2>EQ+U8%>yWR zK%(whl8tB;{C)yRw|@Gn4%RhT=bbpgMZ6erACc>l5^p)9tR`(2W-D*?Ph6;2=Fr|G- zdF^R&aCqyxqWy#P7#G8>+aUG`pP*ow93N=A?pA=aW0^^+?~#zRWcf_zlKL8q8-80n zqGUm=S8+%4_LA7qrV4Eq{FHm9#9X15%ld`@UKyR7uc1X*>Ebr0+2yCye6b?i=r{MPoqnTnYnq z^?HWgl+G&@OcVx4$(y;{m^TkB5Tnhx2O%yPI=r*4H2f_6Gfyasq&PN^W{#)_Gu7e= zVHBQ8R5W6j;N6P3O(jsRU;hkmLG(Xs_8=F&xh@`*|l{~0OjUVlgm z7opltSHg7Mb%mYamGs*v1-#iW^QMT**f+Nq*AzIvFT~Ur3KTD26OhIw1WQsL(6nGg znHUo-4e15cXBIiyqN};5ydNYJ6zznECVVR44%(P0oW!yQ!YH)FPY?^k{IrtrLo7Zo`?sg%%oMP9E^+H@JLXicr zi?eoI?LODRPcMLl90MH32rf8btf69)ZE~&4d%(&D{C45egC6bF-XQ;6QKkbmqW>_H z{86XDZvjiN2wr&ZPfi;^SM6W+IP0);50m>qBhzx+docpBkkiY@2bSvtPVj~E`CfEu zhQG5G>~J@dni5M5Jmv7GD&@%UR`k3ru-W$$onI259jM&nZ)*d3QFF?Mu?{`+nVzkx z=R*_VH=;yeU?9TzQ3dP)q;P)4sAo&k;{*Eky1+Z!10J<(cJC3zY9>bP=znA=<-0RR zMnt#<9^X7BQ0wKVBV{}oaV=?JA=>R0$az^XE%4WZcA^Em>`m_obQyKbmf-GA;!S-z zK5+y5{xbkdA?2NgZ0MQYF-cfOwV0?3Tzh8tcBE{u%Uy?Ky4^tn^>X}p>4&S(L7amF zpWEio8VBNeZ=l!%RY>oVGOtZh7<>v3?`NcHlYDPUBRzgg z0OXEivCkw<>F(>1x@Zk=IbSOn+frQ^+jI*&qdtf4bbydk-jgVmLAd?5ImK+Sigh?X zgaGUlbf^b-MH2@QbqCawa$H1Vb+uhu{zUG9268pa{5>O&Vq8__Xk5LXDaR1z$g;s~;+Ae82wq#l;wo08tX(9uUX6NJWq1vZLh3QbP$# zL`udY|Qp*4ER`_;$%)2 zmcJLj|FD`(;ts0bD{}Ghq6UAVpEm#>j`S$wHi0-D_|)bEZ}#6) zIiqH7Co;TB`<6KrZi1SF9=lO+>-_3=Hm%Rr7|Zu-EzWLSF{9d(H1v*|UZDWiiqX3} zmx~oQ6%9~$=KjPV_ejzz7aPSvTo+3@-a(OCCoF_u#2dHY&I?`nk zQ@t8#epxAv@t=RUM09u?qnPr6=Y5Pj;^4=7GJ`2)Oq~H)2V)M1sC^S;w?hOB|0zXT zQdf8$)jslO>Q}(4RQ$DPUF#QUJm-k9ysZFEGi9xN*_KqCs9Ng(&<;XONBDe1Joku? z*W!lx(i&gvfXZ4U(AE@)c0FI2UqrFLOO$&Yic|`L;Vyy-kcm49hJ^Mj^H9uY8Fdm2 z?=U1U_5GE_JT;Tx$2#I3rAAs(q@oebIK=19a$N?HNQ4jw0ljtyGJ#D}z3^^Y=hf^Bb--297h6LQxi0-`TB|QY2QPg92TAq$cEQdWE ze)ltSTVMYe0K4wte6;^tE+^>|a>Hit_3QDlFo!3Jd`GQYTwlR#{<^MzG zK!vW&))~RTKq4u29bc<+VOcg7fdorq-kwHaaCQe6tLB{|gW1_W_KtgOD0^$^|`V4C# z*D_S9Dt_DIxpjk3my5cBFdiYaq||#0&0&%_LEN}BOxkb3v*d$4L|S|z z!cZZmfe~_Y`46v=zul=aixZTQCOzb(jx>8&a%S%!(;x{M2!*$od2!Pwfs>RZ-a%GOZdO88rS)ZW~{$656GgW)$Q=@!x;&Nn~!K)lr4gF*%qVO=hlodHA@2)keS2 zC}7O=_64#g&=zY?(zhzFO3)f5=+`dpuyM!Q)zS&otpYB@hhn$lm*iK2DRt+#1n|L%zjM}nB*$uAY^2JIw zV_P)*HCVq%F))^)iaZD#R9n^{sAxBZ?Yvi1SVc*`;8|F2X%bz^+s=yS&AXjysDny)YaU5RMotF-tt~FndTK ziRve_5b!``^ZRLG_ks}y_ye0PKyKQSsQCJuK5()b2ThnKPFU?An4;dK>)T^4J+XjD zEUsW~H?Q&l%K4<1f5^?|?lyCQe(O3?!~OU{_Wxs#|Ff8?a_WPQUKvP7?>1()Cy6oLeA zjEF^d#$6Wb${opCc^%%DjOjll%N2=GeS6D-w=Ap$Ux2+0v#s#Z&s6K*)_h{KFfgKjzO17@p1nKcC4NIgt+3t}&}F z@cV; zZ1r#~?R@ZdSwbFNV(fFl2lWI(Zf#nxa<6f!nBZD>*K)nI&Fun@ngq@Ge!N$O< zySt*mY&0moUXNPe~Fg=%gIu)tJ;asscQ!-AujR@VJBRoNZNk;z4hs4T>Ud!y=1NwGs-k zlTNeBOe}=)Epw=}+dfX;kZ32h$t&7q%Xqdt-&tlYEWc>>c3(hVylsG{Ybh_M8>Cz0ZT_6B|3!_(RwEJus9{;u-mq zW|!`{BCtnao4;kCT8cr@yeV~#rf76=%QQs(J{>Mj?>aISwp3{^BjBO zLV>XSRK+o=oVDBnbv?Y@iK)MiFSl{5HLN@k%SQZ}yhPiu_2jrnI?Kk?HtCv>wN$OM zSe#}2@He9bDZ27hX_fZey=64#SNU#1~=icK`D>a;V-&Km>V6ZdVNj7d2 z-NmAoOQm_aIZ2lXpJhlUeJ95eZt~4_S zIfrDs)S$4UjyxKSaTi#9KGs2P zfSD>(y~r+bU4*#|r`q+be_dopJzKK5JNJ#rR978ikHyJKD>SD@^Bk$~D0*U38Y*IpYcH>aaMdZq|YzQ-Ixd(_KZK!+VL@MWGl zG!k=<%Y-KeqK%``uhx}0#X^@wS+mX@6Ul@90#nmYaKh}?uw>U;GS4fn3|X%AcV@iY z8v+ePk)HxSQ7ZYDtlYj#zJ?5uJ8CeCg3efmc#|a%2=u>+vrGGRg$S@^mk~0f;mIu! zWMA13H1<@hSOVE*o0S5D8y=}RiL#jQpUq42D}vW$z*)VB*FB%C?wl%(3>ANaY)bO@ zW$VFutemwy5Q*&*9HJ603;mJJkB$qp6yxNOY0o_4*y?2`qbN{m&*l{)YMG_QHXXa2 z+hTmlA;=mYwg{Bfusl zyF&}ib2J;#q5tN^e)D62fWW*Lv;Rnb3GO-JVtYG0CgR4jGujFo$Waw zSNLhc{>P~>{KVZE1Vl1!z)|HFuN@J7{`xIp_)6>*5Z27BHg6QIgqLqDJTmKDM+ON* zK0Fh=EG`q13l z+m--9UH0{ZGQ%j=OLO8G2WM*tgfY}bV~>3Grcrpehjj z6Xe<$gNJyD8td3EhkHjpKk}7?k55Tu7?#;5`Qcm~ki;BeOlNr+#PK{kjV>qfE?1No zMA07}b>}Dv!uaS8Hym0TgzxBxh$*RX+Fab6Gm02!mr6u}f$_G4C|^GSXJMniy^b`G z74OC=83m0G7L_dS99qv3a0BU({t$zHQsB-RI_jn1^uK9ka_%aQuE2+~J2o!7`735Z zb?+sTe}Gd??VEkz|KAPMfj(1b{om89p5GIJ^#Aics_6DD%WnNGWAW`I<7jT|Af|8g zZA0^)`p8i#oBvX2|I&`HC8Pn&0>jRuMF4i0s=}2NYLmgkZb=0w9tvpnGiU-gTUQhJ zR6o4W6ZWONuBZAiN77#7;TR1^RKE(>>OL>YU`Yy_;5oj<*}ac99DI(qGCtn6`949f ziMpY4k>$aVfffm{dNH=-=rMg|u?&GIToq-u;@1-W&B2(UOhC-O2N5_px&cF-C^tWp zXvChm9@GXEcxd;+Q6}u;TKy}$JF$B`Ty?|Y3tP$N@Rtoy(*05Wj-Ks32|2y2ZM>bM zi8v8E1os!yorR!FSeP)QxtjIKh=F1ElfR8U7StE#Ika;h{q?b?Q+>%78z^>gTU5+> zxQ$a^rECmETF@Jl8fg>MApu>btHGJ*Q99(tMqsZcG+dZ6Yikx7@V09jWCiQH&nnAv zY)4iR$Ro223F+c3Q%KPyP9^iyzZsP%R%-i^MKxmXQHnW6#6n7%VD{gG$E;7*g86G< zu$h=RN_L2(YHO3@`B<^L(q@^W_0#U%mLC9Q^XEo3LTp*~(I%?P_klu-c~WJxY1zTI z^PqntLIEmdtK~E-v8yc&%U+jVxW5VuA{VMA4Ru1sk#*Srj0Pk#tZuXxkS=5H9?8eb z)t38?JNdP@#xb*yn=<*_pK9^lx%;&yH6XkD6-JXgdddZty8@Mfr9UpGE!I<37ZHUe z_Rd+LKsNH^O)+NW8Ni-V%`@J_QGKA9ZCAMSnsN>Ych9VW zCE7R_1FVy}r@MlkbxZ*TRIGXu`ema##OkqCM9{wkWQJg^%3H${!vUT&vv2250jAWN zw=h)C!b2s`QbWhBMSIYmWqZ_~ReRW;)U#@C&ThctSd_V!=HA=kdGO-Hl57an|M1XC?~3f0{7pyjWY}0mChU z2Fj2(B*r(UpCKm-#(2(ZJD#Y|Or*Vc5VyLpJ8gO1;fCm@EM~{DqpJS5FaZ5%|ALw) zyumBl!i@T57I4ITCFmdbxhaOYud}i!0YkdiNRaQ%5$T5>*HRBhyB~<%-5nj*b8=i= z(8g(LA50%0Zi_eQe}Xypk|bt5e6X{aI^jU2*c?!p*$bGk=?t z+17R){lx~Z{!B34Zip~|A;8l@%*Gc}kT|kC0*Ny$&fI3@%M! zqk_zvN}7bM`x@jqFOtaxI?*^Im5ix@=`QEv;__i;Tek-&7kGm6yP17QANVL>*d0B=4>i^;HKb$k8?DYFMr38IX4azK zBbwjF%$>PqXhJh=*7{zH5=+gi$!nc%SqFZlwRm zmpctOjZh3bwt!Oc>qVJhWQf>`HTwMH2ibK^eE*j!&Z`-bs8=A`Yvnb^?p;5+U=Fb8 z@h>j_3hhazd$y^Z-bt%3%E3vica%nYnLxW+4+?w{%|M_=w^04U{a6^22>M_?{@mXP zS|Qjcn4&F%WN7Z?u&I3fU(UQVw4msFehxR*80dSb=a&UG4zDQp&?r2UGPy@G?0FbY zVUQ?uU9-c;f9z06$O5FO1TOn|P{pLcDGP?rfdt`&uw|(Pm@$n+A?)8 zP$nG(VG&aRU*(_5z#{+yVnntu`6tEq>%9~n^*ao}`F6ph_@6_8|AfAXtFfWee_14` zKKURYV}4}=UJmxv7{RSz5QlwZtzbYQs0;t3?kx*7S%nf-aY&lJ@h?-BAn%~0&&@j) zQd_6TUOLXErJ`A3vE?DJIbLE;s~s%eVt(%fMzUq^UfZV9c?YuhO&6pwKt>j(=2CkgTNEq7&c zfeGN+%5DS@b9HO>zsoRXv@}(EiA|t5LPi}*R3?(-=iASADny<{D0WiQG>*-BSROk4vI6%$R>q64J&v-T+(D<_(b!LD z9GL;DV;;N3!pZYg23mcg81tx>7)=e%f|i{6Mx0GczVpc}{}Mg(W_^=Wh0Rp+xXgX` z@hw|5=Je&nz^Xa>>vclstYt;8c2PY)87Ap;z&S&`yRN>yQVV#K{4&diVR7Rm;S{6m z6<+;jwbm`==`JuC6--u6W7A@o4&ZpJV%5+H)}toy0afF*!)AaG5=pz_i9}@OG%?$O z2cec6#@=%xE3K8;^ps<2{t4SnqH+#607gAHP-G4^+PBiC1s>MXf&bQ|Pa;WBIiErV z?3VFpR9JFl9(W$7p3#xe(Bd?Z93Uu~jHJFo7U3K_x4Ej-=N#=a@f;kPV$>;hiN9i9 z<6elJl?bLI$o=|d6jlihA4~bG;Fm2eEnlGxZL`#H%Cdes>uJfMJ4>@1SGGeQ81DwxGxy7L5 zm05Ik*WpSgZvHh@Wpv|2i|Y#FG?Y$hbRM5ZF0Z7FB3cY0+ei#km9mDSPI}^!<<`vr zuv$SPg2vU{wa)6&QMY)h1hbbxvR2cc_6WcWR`SH& z&KuUQcgu}!iW2Wqvp~|&&LSec9>t(UR_|f$;f-fC&tSO-^-eE0B~Frttnf+XN(#T) z^PsuFV#(pE#6ztaI8(;ywN%CtZh?w&;_)w_s@{JiA-SMjf&pQk+Bw<}f@Q8-xCQMwfaf zMgHsAPU=>>Kw~uDFS(IVRN{$ak(SV(hrO!UqhJ?l{lNnA1>U24!=>|q_p404Xd>M# z7?lh^C&-IfeIr`Dri9If+bc%oU0?|Rh8)%BND5;_9@9tuM)h5Kcw6}$Ca7H_n)nOf0pd`boCXItb`o11 zb`)@}l6I_h>n+;`g+b^RkYs7;voBz&Gv6FLmyvY|2pS)z#P;t8k;lS>49a$XeVDc4 z(tx2Pe3N%Gd(!wM`E7WRBZy)~vh_vRGt&esDa0NCua)rH#_39*H0!gIXpd>~{rGx+ zJKAeXAZ-z5n=mMVqlM5Km;b;B&KSJlScD8n?2t}kS4Wf9@MjIZSJ2R?&=zQn zs_`=+5J$47&mP4s{Y{TU=~O_LzSrXvEP6W?^pz<#Y*6Fxg@$yUGp31d(h+4x>xpb< zH+R639oDST6F*0iH<9NHC^Ep*8D4-%p2^n-kD6YEI<6GYta6-I;V^ZH3n5}syTD=P z3b6z=jBsdP=FlXcUe@I|%=tY4J_2j!EVNEzph_42iO3yfir|Dh>nFl&Lu9!;`!zJB zCis9?_(%DI?$CA(00pkzw^Up`O;>AnPc(uE$C^a9868t$m?5Q)CR%!crI$YZpiYK6m= z!jv}82He`QKF;10{9@roL2Q7CF)OeY{~dBp>J~X#c-Z~{YLAxNmn~kWQW|2u!Yq00 zl5LKbzl39sVCTpm9eDW_T>Z{x@s6#RH|P zA~_lYas7B@SqI`N=>x50Vj@S)QxouKC(f6Aj zz}7e5e*5n?j@GO;mCYEo^Jp_*BmLt3!N)(T>f#L$XHQWzZEVlJo(>qH@7;c%fy zS-jm^Adju9Sm8rOKTxfTU^!&bg2R!7C_-t+#mKb_K?0R72%26ASF;JWA_prJ8_SVW zOSC7C&CpSrgfXRp8r)QK34g<~!1|poTS7F;)NseFsbwO$YfzEeG3oo!qe#iSxQ2S# z1=Fxc9J;2)pCab-9o-m8%BLjf(*mk#JJX3k9}S7Oq)dV0jG)SOMbw7V^Z<5Q0Cy$< z^U0QUVd4(96W03OA1j|x%{sd&BRqIERDb6W{u1p1{J(a;fd6lnWzjeS`d?L3-0#o7 z{Qv&L7!Tm`9|}u=|IbwS_jgH(_V@o`S*R(-XC$O)DVwF~B&5c~m!zl14ydT6sK+Ly zn+}2hQ4RTC^8YvrQ~vk$f9u=pTN{5H_yTOcza9SVE&nt_{`ZC8zkmFji=UyD`G4~f zUfSTR=Kju>6u+y&|Bylb*W&^P|8fvEbQH3+w*DrKq|9xMzq2OiZyM=;(?>~4+O|jn zC_Et05oc>e%}w4ye2Fm%RIR??VvofwZS-}BL@X=_4jdHp}FlMhW_IW?Zh`4$z*Wr!IzQHa3^?1|);~VaWmsIcmc6 zJs{k0YW}OpkfdoTtr4?9F6IX6$!>hhA+^y_y@vvA_Gr7u8T+i-< zDX(~W5W{8mfbbM-en&U%{mINU#Q8GA`byo)iLF7rMVU#wXXY`a3ji3m{4;x53216i z`zA8ap?>_}`tQj7-%$K78uR}R$|@C2)qgop$}o=g(jOv0ishl!E(R73N=i0~%S)6+ z1xFP7|H0yt3Z_Re*_#C2m3_X{=zi1C&3CM7e?9-Y5lCtAlA%RFG9PDD=Quw1dfYnZ zdUL)#+m`hKx@PT`r;mIx_RQ6Txbti+&;xQorP;$H=R2r)gPMO9>l+!p*Mt04VH$$M zSLwJ81IFjQ5N!S#;MyBD^IS`2n04kuYbZ2~4%3%tp0jn^**BZQ05ELp zY%yntZ=52s6U5Y93Aao)v~M3y?6h7mZcVGp63pK*d&!TRjW99rUU;@s#3kYB76Bs$|LRwkH>L!0Xe zE=dz1o}phhnOVYZFsajQsRA^}IYZnk9Wehvo>gHPA=TPI?2A`plIm8=F1%QiHx*Zn zi)*Y@)$aXW0v1J|#+R2=$ysooHZ&NoA|Wa}htd`=Eud!(HD7JlT8ug|yeBZmpry(W z)pS>^1$N#nuo3PnK*>Thmaxz4pLcY?PP2r3AlhJ7jw(TI8V#c}>Ym;$iPaw+83L+* z!_QWpYs{UWYcl0u z(&(bT0Q*S_uUX9$jC;Vk%oUXw=A-1I+!c18ij1CiUlP@pfP9}CHAVm{!P6AEJ(7Dn z?}u#}g`Q?`*|*_0Rrnu8{l4PP?yCI28qC~&zlwgLH2AkfQt1?B#3AOQjW&10%@@)Q zDG?`6$8?Nz(-sChL8mRs#3z^uOA>~G=ZIG*mgUibWmgd{a|Tn4nkRK9O^37E(()Q% zPR0#M4e2Q-)>}RSt1^UOCGuv?dn|IT3#oW_$S(YR+jxAzxCD_L25p_dt|^>g+6Kgj zJhC8n)@wY;Y7JI6?wjU$MQU|_Gw*FIC)x~^Eq1k41BjLmr}U>6#_wxP0-2Ka?uK14u5M-lAFSX$K1K{WH!M1&q}((MWWUp#Uhl#n_yT5dFs4X`>vmM& z*1!p0lACUVqp&sZG1GWATvZEENs^0_7Ymwem~PlFN3hTHVBv(sDuP;+8iH07a)s(# z%a7+p1QM)YkS7>kbo${k2N1&*%jFP*7UABJ2d||c!eSXWM*<4(_uD7;1XFDod@cT$ zP>IC%^fbC${^QrUXy$f)yBwY^g@}}kngZKa1US!lAa+D=G4wklukaY8AEW%GL zh40pnuv*6D>9`_e14@wWD^o#JvxYVG-~P)+<)0fW zP()DuJN?O*3+Ab!CP-tGr8S4;JN-Ye^9D%(%8d{vb_pK#S1z)nZzE^ezD&%L6nYbZ z*62>?u)xQe(Akd=e?vZbyb5)MMNS?RheZDHU?HK<9;PBHdC~r{MvF__%T)-9ifM#cR#2~BjVJYbA>xbPyl9yNX zX)iFVvv-lfm`d?tbfh^j*A|nw)RszyD<#e>llO8X zou=q3$1|M@Ob;F|o4H0554`&y9T&QTa3{yn=w0BLN~l;XhoslF-$4KGNUdRe?-lcV zS4_WmftU*XpP}*wFM^oKT!D%_$HMT#V*j;9weoOq0mjbl1271$F)`Q(C z76*PAw3_TE{vntIkd=|(zw)j^!@j ^tV@s0U~V+mu)vv`xgL$Z9NQLnuRdZ;95D|1)!0Aybwv}XCE#xz1k?ZC zxAU)v@!$Sm*?)t2mWrkevNFbILU9&znoek=d7jn*k+~ptQ)6z`h6e4B&g?Q;IK+aH z)X(BH`n2DOS1#{AJD-a?uL)@Vl+`B=6X3gF(BCm>Q(9+?IMX%?CqgpsvK+b_de%Q> zj-GtHKf!t@p2;Gu*~#}kF@Q2HMevg~?0{^cPxCRh!gdg7MXsS}BLtG_a0IY0G1DVm z2F&O-$Dzzc#M~iN`!j38gAn`6*~h~AP=s_gy2-#LMFoNZ0<3q+=q)a|4}ur7F#><%j1lnr=F42Mbti zi-LYs85K{%NP8wE1*r4Mm+ZuZ8qjovmB;f##!E*M{*A(4^~vg!bblYi1M@7tq^L8- zH7tf_70iWXqcSQgENGdEjvLiSLicUi3l0H*sx=K!!HLxDg^K|s1G}6Tam|KBV>%YeU)Q>zxQe;ddnDTWJZ~^g-kNeycQ?u242mZs`i8cP)9qW`cwqk)Jf?Re0=SD=2z;Gafh(^X-=WJ$i7Z9$Pao56bTwb+?p>L3bi9 zP|qi@;H^1iT+qnNHBp~X>dd=Us6v#FPDTQLb9KTk%z{&OWmkx3uY(c6JYyK3w|z#Q zMY%FPv%ZNg#w^NaW6lZBU+}Znwc|KF(+X0RO~Q6*O{T-P*fi@5cPGLnzWMSyoOPe3 z(J;R#q}3?z5Ve%crTPZQFLTW81cNY-finw!LH9wr$(C)p_@v?(y#b-R^Pv!}_#7t+A?pHEUMY zoQZIwSETTKeS!W{H$lyB1^!jn4gTD{_mgG?#l1Hx2h^HrpCXo95f3utP-b&%w80F} zXFs@Jp$lbIL64@gc?k*gJ;OForPaapOH7zNMB60FdNP<*9<@hEXJk9Rt=XhHR-5_$Ck-R?+1py&J3Y9^sBBZuj?GwSzua;C@9)@JZpaI zE?x6{H8@j9P06%K_m%9#nnp0Li;QAt{jf-7X%Pd2jHoI4As-9!UR=h6Rjc z!3{UPWiSeLG&>1V5RlM@;5HhQW_&-wL2?%k@dvRS<+@B6Yaj*NG>qE5L*w~1ATP$D zmWu6(OE=*EHqy{($~U4zjxAwpPn42_%bdH9dMphiUU|) z*+V@lHaf%*GcXP079>vy5na3h^>X=n;xc;VFx)`AJEk zYZFlS#Nc-GIHc}j06;cOU@ zAD7Egkw<2a8TOcfO9jCp4U4oI*`|jpbqMWo(={gG3BjuM3QTGDG`%y|xithFck}0J zG}N#LyhCr$IYP`#;}tdm-7^9=72+CBfBsOZ0lI=LC_a%U@(t3J_I1t(UdiJ^@NubM zvvA0mGvTC%{fj53M^|Ywv$KbW;n8B-x{9}Z!K6v-tw&Xe_D2{7tX?eVk$sA*0826( zuGz!K7$O#;K;1w<38Tjegl)PmRso`fc&>fAT5s z7hzQe-_`lx`}2=c)jz6;yn(~F6#M@z_7@Z(@GWbIAo6A2&;aFf&>CVHpqoPh5#~=G zav`rZ3mSL2qwNL+Pg>aQv;%V&41e|YU$!fQ9Ksle!XZERpjAowHtX zi#0lnw{(zmk&}t`iFEMmx-y7FWaE*vA{Hh&>ieZg{5u0-3@a8BY)Z47E`j-H$dadu zIP|PXw1gjO@%aSz*O{GqZs_{ke|&S6hV{-dPkl*V|3U4LpqhG0eVdqfeNX28hrafI zE13WOsRE|o?24#`gQJs@v*EwL{@3>Ffa;knvI4@VEG2I>t-L(KRS0ShZ9N!bwXa}e zI0}@2#PwFA&Y9o}>6(ZaSaz>kw{U=@;d{|dYJ~lyjh~@bBL>n}#@KjvXUOhrZ`DbnAtf5bz3LD@0RpmAyC-4cgu<7rZo&C3~A_jA*0)v|Ctcdu} zt@c7nQ6hSDC@76c4hI&*v|5A0Mj4eQ4kVb0$5j^*$@psB zdouR@B?l6E%a-9%i(*YWUAhxTQ(b@z&Z#jmIb9`8bZ3Um3UW!@w4%t0#nxsc;*YrG z@x$D9Yj3EiA(-@|IIzi@!E$N)j?gedGJpW!7wr*7zKZwIFa>j|cy<(1`VV_GzWN=1 zc%OO)o*RRobvTZE<9n1s$#V+~5u8ZwmDaysD^&^cxynksn!_ypmx)Mg^8$jXu5lMo zK3K_8GJh#+7HA1rO2AM8cK(#sXd2e?%3h2D9GD7!hxOEKJZK&T`ZS0e*c9c36Y-6yz2D0>Kvqy(EuiQtUQH^~M*HY!$e z20PGLb2Xq{3Ceg^sn+99K6w)TkprP)YyNU(+^PGU8}4&Vdw*u;(`Bw!Um76gL_aMT z>*82nmA8Tp;~hwi0d3S{vCwD};P(%AVaBr=yJ zqB?DktZ#)_VFh_X69lAHQw(ZNE~ZRo2fZOIP;N6fD)J*3u^YGdgwO(HnI4pb$H#9) zizJ<>qI*a6{+z=j+SibowDLKYI*Je2Y>~=*fL@i*f&8**s~4l&B&}$~nwhtbOTr=G zFx>{y6)dpJPqv={_@*!q0=jgw3^j`qi@!wiWiT_$1`SPUgaG&9z9u9=m5C8`GpMaM zyMRSv2llS4F}L?233!)f?mvcYIZ~U z7mPng^=p)@Z*Fp9owSYA`Fe4OjLiJ`rdM`-U(&z1B1`S`ufK_#T@_BvenxDQU`deH$X5eMVO=;I4EJjh6?kkG2oc6AYF6|(t)L0$ukG}Zn=c+R`Oq;nC)W^ z{ek!A?!nCsfd_5>d&ozG%OJmhmnCOtARwOq&p!FzWl7M))YjqK8|;6sOAc$w2%k|E z`^~kpT!j+Y1lvE0B)mc$Ez_4Rq~df#vC-FmW;n#7E)>@kMA6K30!MdiC19qYFnxQ* z?BKegU_6T37%s`~Gi2^ewVbciy-m5%1P3$88r^`xN-+VdhhyUj4Kzg2 zlKZ|FLUHiJCZL8&<=e=F2A!j@3D@_VN%z?J;uw9MquL`V*f^kYTrpoWZ6iFq00uO+ zD~Zwrs!e4cqGedAtYxZ76Bq3Ur>-h(m1~@{x@^*YExmS*vw9!Suxjlaxyk9P#xaZK z)|opA2v#h=O*T42z>Mub2O3Okd3GL86KZM2zlfbS z{Vps`OO&3efvt->OOSpMx~i7J@GsRtoOfQ%vo&jZ6^?7VhBMbPUo-V^Znt%-4k{I# z8&X)=KY{3lXlQg4^FH^{jw0%t#2%skLNMJ}hvvyd>?_AO#MtdvH;M^Y?OUWU6BdMX zJ(h;PM9mlo@i)lWX&#E@d4h zj4Z0Czj{+ipPeW$Qtz_A52HA<4$F9Qe4CiNQSNE2Q-d1OPObk4?7-&`={{yod5Iy3kB=PK3%0oYSr`Gca120>CHbC#SqE*ivL2R(YmI1A|nAT?JmK*2qj_3p#?0h)$#ixdmP?UejCg9%AS2 z8I(=_QP(a(s)re5bu-kcNQc-&2{QZ%KE*`NBx|v%K2?bK@Ihz_e<5Y(o(gQ-h+s&+ zjpV>uj~?rfJ!UW5Mop~ro^|FP3Z`@B6A=@f{Wn78cm`)3&VJ!QE+P9&$;3SDNH>hI z_88;?|LHr%1kTX0t*xzG-6BU=LRpJFZucRBQ<^zy?O5iH$t>o}C}Fc+kM1EZu$hm% zTTFKrJkXmCylFgrA;QAA(fX5Sia5TNo z?=Ujz7$Q?P%kM$RKqRQisOexvV&L+bolR%`u`k;~!o(HqgzV9I6w9|g*5SVZN6+kT9H$-3@%h%k7BBnB zPn+wmPYNG)V2Jv`&$LoI*6d0EO^&Nh`E* z&1V^!!Szd`8_uf%OK?fuj~! z%p9QLJ?V*T^)72<6p1ONqpmD?Wm((40>W?rhjCDOz?#Ei^sXRt|GM3ULLnoa8cABQ zA)gCqJ%Q5J%D&nJqypG-OX1`JLT+d`R^|0KtfGQU+jw79la&$GHTjKF>*8BI z0}l6TC@XB6`>7<&{6WX2kX4k+0SaI`$I8{{mMHB}tVo*(&H2SmZLmW* z+P8N>(r}tR?f!O)?)df>HIu>$U~e~tflVmwk*+B1;TuqJ+q_^`jwGwCbCgSevBqj$ z<`Fj*izeO)_~fq%wZ0Jfvi6<3v{Afz;l5C^C7!i^(W>%5!R=Ic7nm(0gJ~9NOvHyA zqWH2-6w^YmOy(DY{VrN6ErvZREuUMko@lVbdLDq*{A+_%F>!@6Z)X9kR1VI1+Ler+ zLUPtth=u~23=CqZoAbQ`uGE_91kR(8Ie$mq1p`q|ilkJ`Y-ob_=Nl(RF=o7k{47*I)F%_XMBz9uwRH8q1o$TkV@8Pwl zzi`^7i;K6Ak7o58a_D-V0AWp;H8pSjbEs$4BxoJkkC6UF@QNL)0$NU;Wv0*5 z0Ld;6tm7eR%u=`hnUb)gjHbE2cP?qpo3f4w%5qM0J*W_Kl6&z4YKX?iD@=McR!gTyhpGGYj!ljQm@2GL^J70`q~4CzPv@sz`s80FgiuxjAZ zLq61rHv1O>>w1qOEbVBwGu4%LGS!!muKHJ#JjfT>g`aSn>83Af<9gM3XBdY)Yql|{ zUds}u*;5wuus)D>HmexkC?;R&*Z`yB4;k;4T*(823M&52{pOd1yXvPJ3PPK{Zs>6w zztXy*HSH0scZHn7qIsZ8y-zftJ*uIW;%&-Ka0ExdpijI&xInDg-Bv-Q#Islcbz+R! zq|xz?3}G5W@*7jSd`Hv9q^5N*yN=4?Lh=LXS^5KJC=j|AJ5Y(f_fC-c4YQNtvAvn|(uP9@5Co{dL z?7|=jqTzD8>(6Wr&(XYUEzT~-VVErf@|KeFpKjh=v51iDYN_`Kg&XLOIG;ZI8*U$@ zKig{dy?1H}UbW%3jp@7EVSD>6c%#abQ^YfcO(`)*HuvNc|j( zyUbYozBR15$nNU$0ZAE%ivo4viW?@EprUZr6oX=4Sc!-WvrpJdF`3SwopKPyX~F>L zJ>N>v=_plttTSUq6bYu({&rkq)d94m5n~Sk_MO*gY*tlkPFd2m=Pi>MK)ObVV@Sgs zmXMNMvvcAuz+<$GLR2!j4w&;{)HEkxl{$B^*)lUKIn&p5_huD6+%WDoH4`p}9mkw$ zXCPw6Y7tc%rn$o_vy>%UNBC`0@+Ih-#T05AT)ooKt?94^ROI5;6m2pIM@@tdT=&WP z{u09xEVdD}{(3v}8AYUyT82;LV%P%TaJa%f)c36?=90z>Dzk5mF2}Gs0jYCmufihid8(VFcZWs8#59;JCn{!tHu5kSBbm zL`F{COgE01gg-qcP2Lt~M9}mALg@i?TZp&i9ZM^G<3`WSDh}+Ceb3Q!QecJ|N;Xrs z{wH{D8wQ2+mEfBX#M8)-32+~q4MRVr1UaSPtw}`iwx@x=1Xv-?UT{t}w}W(J&WKAC zrZ%hssvf*T!rs}}#atryn?LB=>0U%PLwA9IQZt$$UYrSw`7++}WR7tfE~*Qg)vRrM zT;(1>Zzka?wIIz8vfrG86oc^rjM@P7^i8D~b(S23AoKYj9HBC(6kq9g`1gN@|9^xO z{~h zbxGMHqGZ@eJ17bgES?HQnwp|G#7I>@p~o2zxWkgZUYSUeB*KT{1Q z*J3xZdWt`eBsA}7(bAHNcMPZf_BZC(WUR5B8wUQa=UV^e21>|yp+uop;$+#JwXD!> zunhJVCIKgaol0AM_AwJNl}_k&q|uD?aTE@{Q*&hxZ=k_>jcwp}KwG6mb5J*pV@K+- zj*`r0WuEU_8O=m&1!|rj9FG7ad<2px63;Gl z9lJrXx$~mPnuiqIH&n$jSt*ReG}1_?r4x&iV#3e_z+B4QbhHwdjiGu^J3vcazPi`| zaty}NFSWe=TDry*a*4XB)F;KDI$5i9!!(5p@5ra4*iW;FlGFV0P;OZXF!HCQ!oLm1 zsK+rY-FnJ?+yTBd0}{*Y6su|hul)wJ>RNQ{eau*;wWM{vWM`d0dTC-}Vwx6@cd#P? zx$Qyk^2*+_ZnMC}q0)+hE-q)PKoox#;pc%DNJ&D5+if6X4j~p$A7-s&AjDkSEV)aM z(<3UOw*&f)+^5F0Mpzw3zB1ZHl*B?C~Cx) zuNg*>5RM9F5{EpU@a2E7hAE`m<89wbQ2Lz&?Egu-^sglNXG5Q;{9n(%&*kEb0vApd zRHrY@22=pkFN81%x)~acZeu`yvK zovAVJNykgxqkEr^hZksHkpxm>2I8FTu2%+XLs@?ym0n;;A~X>i32{g6NOB@o4lk8{ zB}7Z2MNAJi>9u=y%s4QUXaNdt@SlAZr54!S6^ETWoik6gw=k-itu_}Yl_M9!l+Rbv z(S&WD`{_|SE@@(|Wp7bq1Zq}mc4JAG?mr2WN~6}~u`7M_F@J9`sr0frzxfuqSF~mA z$m$(TWAuCIE99yLSwi%R)8geQhs;6VBlRhJb(4Cx zu)QIF%_W9+21xI45U>JknBRaZ9nYkgAcK6~E|Zxo!B&z9zQhjsi^fgwZI%K@rYbMq znWBXg1uCZ+ljGJrsW7@x3h2 z;kn!J!bwCeOrBx;oPkZ}FeP%wExyf4=XMp)N8*lct~SyfK~4^-75EZFpHYO5AnuRM z!>u?>Vj3+j=uiHc<=cD~JWRphDSwxFaINB42-{@ZJTWe85>-RcQ&U%?wK)vjz z5u5fJYkck##j(bP7W0*RdW#BmAIK`D3=(U~?b`cJ&U2jHj}?w6 z_4BM)#EoJ6)2?pcR4AqBd)qAUn@RtNQq})FIQoBK4ie+GB(Vih2D|Ds>RJo2zE~C- z7mI)7p)5(-O6JRh6a@VZ5~piVC+Xv=O-)=0eTMSJsRE^c1@bPQWlr}E31VqO-%739 zdcmE{`1m;5LH8w|7euK>>>U#Iod8l1yivC>;YWsg=z#07E%cU9x1yw#3l6AcIm%79 zGi^zH6rM#CZMow(S(8dcOq#5$kbHnQV6s?MRsU3et!!YK5H?OV9vf2qy-UHCn>}2d zTwI(A_fzmmCtE@10yAGgU7R&|Fl$unZJ_^0BgCEDE6(B*SzfkapE9#0N6adc>}dtH zJ#nt^F~@JMJg4=Pv}OdUHyPt-<<9Z&c0@H@^4U?KwZM&6q0XjXc$>K3c&3iXLD9_%(?)?2kmZ=Ykb;)M`Tw=%_d=e@9eheGG zk0<`4so}r={C{zr|6+_1mA_=a56(XyJq||g6Es1E6%fPg#l{r+vk9;)r6VB7D84nu zE0Z1EIxH{Y@}hT+|#$0xn+CdMy6Uhh80eK~nfMEIpM z`|G1v!USmx81nY8XkhEOSWto}pc#{Ut#`Pqb}9j$FpzkQ7`0<-@5D_!mrLah98Mpr zz(R7;ZcaR-$aKqUaO!j z=7QT;Bu0cvYBi+LDfE_WZ`e@YaE_8CCxoRc?Y_!Xjnz~Gl|aYjN2&NtT5v4#q3od2 zkCQZHe#bn(5P#J**Fj4Py%SaaAKJsmV6}F_6Z7V&n6QAu8UQ#9{gkq+tB=VF_Q6~^ zf(hXvhJ#tC(eYm6g|I>;55Lq-;yY*COpTp4?J}hGQ42MIVI9CgEC{3hYw#CZfFKVG zgD(steIg8veyqX%pYMoulq zMUmbj8I`t>mC`!kZ@A>@PYXy*@NprM@e}W2Q+s?XIRM-U1FHVLM~c60(yz1<46-*j zW*FjTnBh$EzI|B|MRU11^McTPIGVJrzozlv$1nah_|t4~u}Ht^S1@V8r@IXAkN;lH z_s|WHlN90k4X}*#neR5bX%}?;G`X!1#U~@X6bbhgDYKJK17~oFF0&-UB#()c$&V<0 z7o~Pfye$P@$)Lj%T;axz+G1L_YQ*#(qO zQND$QTz(~8EF1c3<%;>dAiD$>8j@7WS$G_+ktE|Z?Cx<}HJb=!aChR&4z ziD&FwsiZ)wxS4k6KTLn>d~!DJ^78yb>?Trmx;GLHrbCBy|Bip<@sWdAfP0I~;(Ybr zoc-@j?wA!$ zIP0m3;LZy+>dl#&Ymws@7|{i1+OFLYf@+8+)w}n?mHUBCqg2=-Hb_sBb?=q))N7Ej zDIL9%@xQFOA!(EQmchHiDN%Omrr;WvlPIN5gW;u#ByV)x2aiOd2smy&;vA2+V!u|D zc~K(OVI8} z0t|e0OQ7h23e01O;%SJ}Q#yeDh`|jZR7j-mL(T4E;{w^}2hzmf_6PF|`gWVj{I?^2T3MBK>{?nMXed4kgNox2DP!jvP9v`;pa6AV)OD zDt*Vd-x7s{-;E?E5}3p-V;Y#dB-@c5vTWfS7<=>E+tN$ME`Z7K$px@!%{5{uV`cH80|IzU! zDs9=$%75P^QKCRQ`mW7$q9U?mU@vrFMvx)NNDrI(uk>xwO;^($EUvqVev#{W&GdtR z0ew;Iwa}(-5D28zABlC{WnN{heSY5Eq5Fc=TN^9X#R}0z53!xP85#@;2E=&oNYHyo z46~#Sf!1M1X!rh}ioe`>G2SkPH{5nCoP`GT@}rH;-LP1Q7U_ypw4+lwsqiBql80aA zJE<(88yw$`xzNiSnU(hsyJqHGac<}{Av)x9lQ=&py9djsh0uc}6QkmKN3{P!TEy;P zzLDVQj4>+0r<9B0owxBt5Uz`!M_VSS|{(?`_e+qD9b=vZHoo6>?u;!IP zM7sqoyP>kWY|=v06gkhaGRUrO8n@zE?Yh8$om@8%=1}*!2wdIWsbrCg@;6HfF?TEN z+B_xtSvT6H3in#8e~jvD7eE|LTQhO_>3b823&O_l$R$CFvP@3~)L7;_A}JpgN@ax{ z2d9Ra)~Yh%75wsmHK8e87yAn-ZMiLo6#=<&PgdFsJw1bby-j&3%&4=9dQFltFR(VB z@=6XmyNN4yr^^o$ON8d{PQ=!OX17^CrdM~7D-;ZrC!||<+FEOxI_WI3 zCA<35va%4v>gcEX-@h8esj=a4szW7x z{0g$hwoWRQG$yK{@3mqd-jYiVofJE!Wok1*nV7Gm&Ssq#hFuvj1sRyHg(6PFA5U*Q z8Rx>-blOs=lb`qa{zFy&n4xY;sd$fE+<3EI##W$P9M{B3c3Si9gw^jlPU-JqD~Cye z;wr=XkV7BSv#6}DrsXWFJ3eUNrc%7{=^sP>rp)BWKA9<}^R9g!0q7yWlh;gr_TEOD|#BmGq<@IV;ue zg+D2}cjpp+dPf&Q(36sFU&K8}hA85U61faW&{lB`9HUl-WWCG|<1XANN3JVAkRYvr5U z4q6;!G*MTdSUt*Mi=z_y3B1A9j-@aK{lNvxK%p23>M&=KTCgR!Ee8c?DAO2_R?Bkaqr6^BSP!8dHXxj%N1l+V$_%vzHjq zvu7p@%Nl6;>y*S}M!B=pz=aqUV#`;h%M0rUHfcog>kv3UZAEB*g7Er@t6CF8kHDmK zTjO@rejA^ULqn!`LwrEwOVmHx^;g|5PHm#B6~YD=gjJ!043F+&#_;D*mz%Q60=L9O zve|$gU&~As5^uz@2-BfQ!bW)Khn}G+Wyjw-19qI#oB(RSNydn0t~;tAmK!P-d{b-@ z@E5|cdgOS#!>%#Rj6ynkMvaW@37E>@hJP^82zk8VXx|3mR^JCcWdA|t{0nPmYFOxN z55#^-rlqobcr==<)bi?E?SPymF*a5oDDeSdO0gx?#KMoOd&G(2O@*W)HgX6y_aa6i zMCl^~`{@UR`nMQE`>n_{_aY5nA}vqU8mt8H`oa=g0SyiLd~BxAj2~l$zRSDHxvDs; zI4>+M$W`HbJ|g&P+$!U7-PHX4RAcR0szJ*(e-417=bO2q{492SWrqDK+L3#ChUHtz z*@MP)e^%@>_&#Yk^1|tv@j4%3T)diEXATx4K*hcO`sY$jk#jN5WD<=C3nvuVs zRh||qDHnc~;Kf59zr0;c7VkVSUPD%NnnJC_l3F^#f_rDu8l}l8qcAz0FFa)EAt32I zUy_JLIhU_J^l~FRH&6-iv zSpG2PRqzDdMWft>Zc(c)#tb%wgmWN%>IOPmZi-noqS!^Ft zb81pRcQi`X#UhWK70hy4tGW1mz|+vI8c*h@fFGJtW3r>qV>1Z0r|L>7I3un^gcep$ zAAWfZHRvB|E*kktY$qQP_$YG60C z@X~tTQjB3%@`uz!qxtxF+LE!+=nrS^07hn`EgAp!h|r03h7B!$#OZW#ACD+M;-5J!W+{h z|6I;5cNnE(Y863%1(oH}_FTW})8zYb$7czPg~Szk1+_NTm6SJ0MS_|oSz%e(S~P-& zSFp;!k?uFayytV$8HPwuyELSXOs^27XvK-DOx-Dl!P|28DK6iX>p#Yb%3`A&CG0X2 zS43FjN%IB}q(!hC$fG}yl1y9W&W&I@KTg6@K^kpH8=yFuP+vI^+59|3%Zqnb5lTDAykf9S#X`3N(X^SpdMyWQGOQRjhiwlj!0W-yD<3aEj^ z&X%=?`6lCy~?`&WSWt?U~EKFcCG_RJ(Qp7j=$I%H8t)Z@6Vj zA#>1f@EYiS8MRHZphpMA_5`znM=pzUpBPO)pXGYpQ6gkine{ z6u_o!P@Q+NKJ}k!_X7u|qfpAyIJb$_#3@wJ<1SE2Edkfk9C!0t%}8Yio09^F`YGzp zaJHGk*-ffsn85@)%4@`;Fv^8q(-Wk7r=Q8pT&hD`5(f?M{gfzGbbwh8(}G#|#fDuk z7v1W)5H9wkorE0ZZjL0Q1=NRGY>zwgfm81DdoaVwNH;or{{e zSyybt)m<=zXoA^RALYG-2touH|L*BLvmm9cdMmn+KGopyR@4*=&0 z&4g|FLoreZOhRmh=)R0bg~T2(8V_q7~42-zvb)+y959OAv!V$u(O z3)%Es0M@CRFmG{5sovIq4%8Ahjk#*5w{+)+MWQoJI_r$HxL5km1#6(e@{lK3Udc~n z0@g`g$s?VrnQJ$!oPnb?IHh-1qA`Rz$)Ai<6w$-MJW-gKNvOhL+XMbE7&mFt`x1KY z>k4(!KbbpZ`>`K@1J<(#vVbjx@Z@(6Q}MF#Mnbr-f55)vXj=^j+#)=s+ThMaV~E`B z8V=|W_fZWDwiso8tNMTNse)RNBGi=gVwgg%bOg8>mbRN%7^Um-7oj4=6`$|(K7!+t^90a{$1 z8Z>}<#!bm%ZEFQ{X(yBZMc>lCz0f1I2w9SquGh<9<=AO&g6BZte6hn>Qmvv;Rt)*c zJfTr2=~EnGD8P$v3R|&1RCl&7)b+`=QGapiPbLg_pxm`+HZurtFZ;wZ=`Vk*do~$wBxoW&=j0OTbQ=Q%S8XJ%~qoa3Ea|au5 zo}_(P;=!y z-AjFrERh%8la!z6Fn@lR?^E~H12D? z8#ht=1F;7@o4$Q8GDj;sSC%Jfn01xgL&%F2wG1|5ikb^qHv&9hT8w83+yv&BQXOQy zMVJSBL(Ky~p)gU3#%|blG?I zR9rP^zUbs7rOA0X52Ao=GRt@C&zlyjNLv-}9?*x{y(`509qhCV*B47f2hLrGl^<@S zuRGR!KwHei?!CM10pBKpDIoBNyRuO*>3FU?HjipIE#B~y3FSfOsMfj~F9PNr*H?0o zHyYB^G(YyNh{SxcE(Y-`x5jFMKb~HO*m+R%rq|ic4fzJ#USpTm;X7K+E%xsT_3VHK ze?*uc4-FsILUH;kL>_okY(w`VU*8+l>o>JmiU#?2^`>arnsl#)*R&nf_%>A+qwl%o z{l(u)M?DK1^mf260_oteV3#E_>6Y4!_hhVDM8AI6MM2V*^_M^sQ0dmHu11fy^kOqX zqzps-c5efIKWG`=Es(9&S@K@)ZjA{lj3ea7_MBPk(|hBFRjHVMN!sNUkrB;(cTP)T97M$ z0Dtc&UXSec<+q?y>5=)}S~{Z@ua;1xt@=T5I7{`Z=z_X*no8s>mY;>BvEXK%b`a6(DTS6t&b!vf_z#HM{Uoy z_5fiB(zpkF{})ruka$iX*~pq1ZxD?q68dIoIZSVls9kFGsTwvr4{T_LidcWtt$u{k zJlW7moRaH6+A5hW&;;2O#$oKyEN8kx z`LmG)Wfq4ykh+q{I3|RfVpkR&QH_x;t41UwxzRFXt^E2B$domKT@|nNW`EHwyj>&< zJatrLQ=_3X%vd%nHh^z@vIk(<5%IRAa&Hjzw`TSyVMLV^L$N5Kk_i3ey6byDt)F^U zuM+Ub4*8+XZpnnPUSBgu^ijLtQD>}K;eDpe1bNOh=fvIfk`&B61+S8ND<(KC%>y&? z>opCnY*r5M+!UrWKxv0_QvTlJc>X#AaI^xoaRXL}t5Ej_Z$y*|w*$6D+A?Lw-CO-$ zitm^{2Ct82-<0IW)0KMNvJHgBrdsIR0v~=H?n6^}l{D``Me90`^o|q!olsF?UX3YS zq^6Vu>Ijm>>PaZI8G@<^NGw{Cx&%|PwYrfwR!gX_%AR=L3BFsf8LxI|K^J}deh0Zd zV?$3r--FEX`#INxsOG6_=!v)DI>0q|BxT)z-G6kzA01M?rba+G_mwNMQD1mbVbNTW zmBi*{s_v_Ft9m2Avg!^78(QFu&n6mbRJ2bAv!b;%yo{g*9l2)>tsZJOOp}U~8VUH`}$8p_}t*XIOehezolNa-a2x0BS})Y9}& z*TPgua{Ewn-=wVrmJUeU39EKx+%w%=ixQWKDLpwaNJs65#6o7Ln7~~X+p_o2BR1g~ zVCfxLzxA{HlWAI6^H;`juI=&r1jQrUv_q0Z1Ja-tjdktrrP>GOC*#p?*xfQU5MqjM zsBe!9lh(u8)w$e@Z|>aUHI5o;MGw*|Myiz3-f0;pHg~Q#%*Kx8MxH%AluVXjG2C$) zWL-K63@Q`#y9_k_+}eR(x4~dp7oV-ek0H>Igy8p#i4GN{>#v=pFYUQT(g&b$OeTy- zX_#FDgNF8XyfGY6R!>inYn8IR2RDa&O!(6NIHrC0H+Qpam1bNa=(`SRKjixBTtm&e z`j9porEci!zdlg1RI0Jw#b(_Tb@RQK1Zxr_%7SUeH6=TrXt3J@js`4iDD0=I zoHhK~I7^W8^Rcp~Yaf>2wVe|Hh1bXa_A{oZ9eG$he;_xYvTbTD#moBy zY57-f2Ef1TP^lBi&p5_s7WGG9|0T}dlfxOxXvScJO1Cnq`c`~{Dp;{;l<-KkCDE+p zmexJkd}zCgE{eF=)K``-qC~IT6GcRog_)!X?fK^F8UDz$(zFUrwuR$qro5>qqn>+Z z%<5>;_*3pZ8QM|yv9CAtrAx;($>4l^_$_-L*&?(77!-=zvnCVW&kUcZMb6;2!83si z518Y%R*A3JZ8Is|kUCMu`!vxDgaWjs7^0j(iTaS4HhQ)ldR=r)_7vYFUr%THE}cPF z{0H45FJ5MQW^+W>P+eEX2kLp3zzFe*-pFVAdDZRybv?H|>`9f$AKVjFWJ=wegO7hO zOIYCtd?Vj{EYLT*^gl35|HbMX|NAEUf2ra9dy1=O;figB>La=~eA^#>O6n4?EMugV zbbt{Dbfef5l^(;}5kZ@!XaWwF8z0vUr6r|+QN*|WpF z^*osUHzOnE$lHuWYO$G7>}Y)bY0^9UY4eDV`E{s+{}Z$O$2*lMEYl zTA`ki(<0(Yrm~}15V-E^e2W6`*`%ydED-3G@$UFm6$ZtLx z+av`BhsHcAWqdxPWfu2*%{}|Sptax4_=NpDMeWy$* zZM6__s`enB$~0aT1BU^2k`J9F%+n+lL_|8JklWOCVYt*0%o*j4w1CsB_H^tVpYT_LLyKuyk=CV6~1M<7~^FylL*+AIFf3h>J=x$ygY-BG}4LJ z8XxYPY!v7dO3PVwEoY=`)6krokmR^|Mg5ztX_^#QR}ibr^X-|_St#rtv3gukh0(#A=};NPlNz57ZDFJ9hf#NP50zS)+Fo=StX)i@ zWS?W}i6LjB>kAB~lupAPyIjFb)izFgRq*iS*(Jt509jNr3r72{Gj`5DGoj;J&k5G@Rm!dJ($ox>SbxR)fc zz|Phug;~A7!p@?|mMva@rWuf2fSDK_ZxN3vVmlYz>rrf?LpiNs)^z!y{As@`55JC~ zS*GD3#N-ptY!2<613UelAJ;M4EEI$dm)`8#n$|o{ce^dlyoUY3bsy2hgnj-;ovubb zg2h1rZA6Ot}K_cpYBpIuF&CyK~5R0Wv;kG|3A^8K3nk{rw$Be8u@aos#qvKQKJyVU$cX6biw&Ep#+q7upFX z%qo&`WZ){<%zh@BTl{MO@v9#;t+cb7so0Uz49Fmo1e4>y!vUyIHadguZS0T7-x#_drMXz*16*c zymR0u^`ZQpXN}2ofegbpSedL%F9aypdQcrzjzPlBW0j zMlPzC&ePZ@Cq!?d%9oQNEg0`rHALm8l#lUdXMVEqDvb(AID~H(?H9z!e9G98fG@IzhajKr)3{L_Clu1(Bwg`RM!-(MOuZi zbeDsj9I3(~EITsE=3Z)a|l_rn8W92U0DB70gF7YYfO0j!)h?QobY1lSR>0 z_TVw@$eP~3k8r9;%g%RlZzCJ2%f}DvY`rsZ$;ak&^~-`i%B%+O!pnADeVyV!dHj|} zzOj#q4eRx9Q8c2Z7vy9L&fGLj+3_?fp}+8o`Xpwyi(81H|7P8#65%FIS*lOi={o&v z4NV$xu7az4Nb50dRGZv<tdZCx4Ek<_o3!mAT} zL5l*|K3Qr-)W8paaG z&R6{ped_4e2cy}ejD0!dt{*PaC*^L@eB%(1Fmc%Y#4)~!jF#lCGfj#E??4LG-T;!M z>Uha}f;W>ib_ZL-I7-v9KZQls^G!-JmL^w;=^}?!RXK;m4$#MwI2AH-l7M2-0 zVMK8k^+4+>2S0k^N_40EDa#`7c;2!&3-o6MHsnBfRnq@>E@)=hDulVq-g5SQWDWbt zj6H5?QS2gRZ^Zvbs~cW|8jagJV|;^zqC0e=D1oUsQPJ3MCb+eRGw(XgIY9y8v_tXq z9$(xWntWpx_Uronmvho{JfyYdV{L1N$^s^|-Nj`Ll`lUsiWTjm&8fadUGMXreJGw$ zQ**m+Tj|(XG}DyUKY~2?&9&n6SJ@9VKa9Hcayv{ar^pNr0WHy zP$bQv&8O!vd;GoT!pLwod-42qB^`m!b7nP@YTX}^+1hzA$}LSLh}Ln|?`%8xGMazw z8WT!LoYJ-Aq3=2p6ZSP~uMgSSWv3f`&-I06tU}WhZsA^6nr&r17hjQIZE>^pk=yZ% z06}dfR$85MjWJPq)T?OO(RxoaF+E#4{Z7)i9}Xsb;Nf+dzig61HO;@JX1Lf9)R5j9)Oi6vPL{H z&UQ9ln=$Q8jnh6-t;`hKM6pHftdd?$=1Aq16jty4-TF~`Gx=C&R242uxP{Y@Q~%O3 z*(16@x+vJsbW@^3tzY=-5MHi#(kB};CU%Ep`mVY1j$MAPpYJBB3x$ue`%t}wZ-@CG z(lBv36{2HMjxT)2$n%(UtHo{iW9>4HX4>)%k8QNnzIQYXrm-^M%#Qk%9odbUrZDz1YPdY`2Z4w~p!5tb^m(mUfk}kZ9+EsmenQ)5iwiaulcy zCJ#2o4Dz?@%)aAKfVXYMF;3t@aqNh2tBBlBkCdj`F31b=h93y(46zQ-YK@+zX5qM9 z&=KkN&3@Ptp*>UD$^q-WpG|9O)HBXz{D>p!`a36aPKkgz7uxEo0J>-o+4HHVD9!Hn z${LD0d{tuGsW*wvZoHc8mJroAs(3!FK@~<}Pz1+vY|Gw}Lwfxp{4DhgiQ_SSlV)E| zZWZxYZLu2EB1=g_y@(ieCQC_1?WNA0J0*}eMZfxCCs>oL;?kHdfMcKB+A)Qull$v( z2x6(38utR^-(?DG>d1GyU()8>ih3ud0@r&I$`ZSS<*1n6(76=OmP>r_JuNCdS|-8U zxGKXL1)Lc2kWY@`_kVBt^%7t9FyLVYX(g%a6>j=yURS1!V<9ieT$$5R+yT!I>}jI5 z?fem|T=Jq;BfZmsvqz_Ud*m5;&xE66*o*S22vf-L+MosmUPPA}~wy`kntf8rIeP-m;;{`xe}9E~G7J!PYoVH_$q~NzQab?F8vWUja5BJ!T5%5IpyqI#Dkps0B;gQ*z?c#N>spFw|wRE$gY?y4wQbJ zku2sVLh({KQz6e0yo+X!rV#8n8<;bHWd{ZLL_(*9Oi)&*`LBdGWz>h zx+p`Wi00u#V$f=CcMmEmgFjw+KnbK3`mbaKfoCsB{;Q^oJgj*LWnd_(dk9Kcssbj` z?*g8l`%{*LuY!Ls*|Tm`1Gv-tRparW8q4AK(5pfJFY5>@qO( zcY>pt*na>LlB^&O@YBDnWLE$x7>pMdSmb-?qMh79eB+Wa{)$%}^kX@Z3g>fytppz! zl%>pMD(Yw+5=!UgYHLD69JiJ;YhiGeEyZM$Au{ff;i zCBbNQfO{d!b7z^F732XX&qhEsJA1UZtJjJEIPyDq+F`LeAUU_4`%2aTX#3NG3%W8u zC!7OvlB?QJ4s2#Ok^_8SKcu&pBd}L?vLRT8Kow#xARt`5&Cg=ygYuz>>c z4)+Vv$;<$l=is&E{k&4Lf-Lzq#BHuWc;wDfm4Fbd5Sr!40s{UpKT$kzmUi{V0t1yp zPOf%H8ynE$x@dQ_!+ISaI}#%72UcYm7~|D*(Fp8xiFAj$CmQ4oH3C+Q8W=Y_9Sp|B z+k<%5=y{eW=YvTivV(*KvC?qxo)xqcEU9(Te=?ITts~;xA0Jph-vpd4@Zw#?r2!`? zB3#XtIY^wxrpjJv&(7Xjvm>$TIg2ZC&+^j(gT0R|&4cb)=92-2Hti1`& z=+M;*O%_j3>9zW|3h{0Tfh5i)Fa;clGNJpPRcUmgErzC{B+zACiPHbff3SmsCZ&X; zp=tgI=zW-t(5sXFL8;ITHw0?5FL3+*z5F-KcLN130l=jAU6%F=DClRPrzO|zY+HD`zlZ-)JT}X?2g!o zxg4Ld-mx6&*-N0-MQ(z+zJo8c`B39gf{-h2vqH<=^T&o1Dgd>4BnVht+JwLcrjJl1 zsP!8`>3-rSls07q2i1hScM&x0lQyBbk(U=#3hI7Bkh*kj6H*&^p+J?OMiT_3*vw5R zEl&p|QQHZq6f~TlAeDGy(^BC0vUK?V&#ezC0*#R-h}_8Cw8-*${mVfHssathC8%VA zUE^Qd!;Rvym%|f@?-!sEj|73Vg8!$$zj_QBZAOraF5HCFKl=(Ac|_p%-P;6z<2WSf zz(9jF2x7ZR{w+p)ETCW06PVt0YnZ>gW9^sr&~`%a_7j-Ful~*4=o|&TM@k@Px2z>^ t{*Ed16F~3V5p+(suF-++X8+nHtT~NSfJ>UC3v)>lEpV}<+rIR_{{yMcG_L>v literal 0 HcmV?d00001 diff --git a/appinventor/gradle/wrapper/gradle-wrapper.properties b/appinventor/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000000..41dfb87909a --- /dev/null +++ b/appinventor/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/appinventor/gradlew b/appinventor/gradlew new file mode 100644 index 00000000000..1b6c787337f --- /dev/null +++ b/appinventor/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/appinventor/gradlew.bat b/appinventor/gradlew.bat new file mode 100644 index 00000000000..107acd32c4e --- /dev/null +++ b/appinventor/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega From fa27de634f1e0353b38aa52bebf109195f1d6ad2 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 00:07:14 +0530 Subject: [PATCH 06/35] groovy -> kotlin --- appinventor/appengine/build.gradle.kts | 3 + appinventor/build.gradle | 10 -- appinventor/build.gradle.kts | 6 ++ appinventor/buildserver/build.gradle.kts | 36 ++++++++ appinventor/common/build.gradle | 84 ----------------- appinventor/common/build.gradle.kts | 112 +++++++++++++++++++++++ appinventor/settings.gradle | 2 - appinventor/settings.gradle.kts | 3 + 8 files changed, 160 insertions(+), 96 deletions(-) create mode 100644 appinventor/appengine/build.gradle.kts delete mode 100644 appinventor/build.gradle create mode 100644 appinventor/build.gradle.kts create mode 100644 appinventor/buildserver/build.gradle.kts delete mode 100644 appinventor/common/build.gradle create mode 100644 appinventor/common/build.gradle.kts delete mode 100644 appinventor/settings.gradle create mode 100644 appinventor/settings.gradle.kts diff --git a/appinventor/appengine/build.gradle.kts b/appinventor/appengine/build.gradle.kts new file mode 100644 index 00000000000..4e5a1aafe46 --- /dev/null +++ b/appinventor/appengine/build.gradle.kts @@ -0,0 +1,3 @@ +plugins { + java +} \ No newline at end of file diff --git a/appinventor/build.gradle b/appinventor/build.gradle deleted file mode 100644 index ed97b9bb67a..00000000000 --- a/appinventor/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -description = 'Definitions common to multiple App Inventor build.xml files.' - -ext { - debug = true -} - -task clean(type: Delete) { - delete 'build' - delete 'reports' -} diff --git a/appinventor/build.gradle.kts b/appinventor/build.gradle.kts new file mode 100644 index 00000000000..d783405ecb2 --- /dev/null +++ b/appinventor/build.gradle.kts @@ -0,0 +1,6 @@ +description = "Definitions common to multiple App Inventor build.xml files." + +//tasks.register("clean") { +// delete("build") +// delete("reports") +//} diff --git a/appinventor/buildserver/build.gradle.kts b/appinventor/buildserver/build.gradle.kts new file mode 100644 index 00000000000..a24978ed0d6 --- /dev/null +++ b/appinventor/buildserver/build.gradle.kts @@ -0,0 +1,36 @@ +plugins { + application +} + +application { + mainClass.set("com.google.appinventor.buildserver.BuildServer.java") +} + +sourceSets { + main { + java { + setSrcDirs(listOf("src")) + } + } + + test { + java { + setSrcDirs(listOf("tests")) + } + } +} + +repositories { + mavenCentral() +} + +println(projects.common.artifacts) + +dependencies { + implementation(projects.common) + implementation(fileTree("lib") { include("*.jar") }) + implementation("org.json:json:20220320") + implementation("args4j:args4j:2.0.22") + implementation("com.google.guava:guava:14.0.1") + implementation("commons-io:commons-io:2.0.1") +} \ No newline at end of file diff --git a/appinventor/common/build.gradle b/appinventor/common/build.gradle deleted file mode 100644 index 665a9e59830..00000000000 --- a/appinventor/common/build.gradle +++ /dev/null @@ -1,84 +0,0 @@ -import org.apache.tools.ant.filters.ReplaceTokens - -plugins { - id 'java' -} - -sourceSets { - commonUtils { - java { - srcDirs = ['src/com/google/appinventor/common/utils/'] - } -// TODO: breaks when commonUtils & commonVersion both have same resources dir -// resources { -// srcDirs = ['src/com/google/appinventor/common/'] -// include 'CommonUtils.gwt.xml' -// } - } - commonVersion { - java { - srcDirs = [ - 'src/com/google/appinventor/common/version/', - "$buildDir/generated/src/com/google/appinventor/common/version/" - ] - } -// TODO: see above -// resources { -// srcDirs = ['src/com/google/appinventor/common/'] -// include 'CommonVersion.gwt.xml' -// } - } -} - -dependencies { - commonUtilsImplementation files('../lib/guava/guava-14.0.1.jar') -} - -defaultTasks 'CommonUtilsJar', 'CommonUtilsGwtJar', 'CommonVersionJar', 'CommonVersionGwtJar' - -task GitBuildId(type: Copy) { - from 'GitBuildId.template' - into "$buildDir/generated/src/com/google/appinventor/common/version/" - - filter ReplaceTokens, tokens: [ - "git.build.version" : 'git describe --dirty'.execute().text.trim(), - "git.build.fingerprint": 'git rev-parse HEAD'.execute().text.trim(), - "ant.build.date" : new Date().format('MMMM dd yyyy'), - "acra.uri" : '' - ] - filteringCharset = 'UTF-8' - - rename '(GitBuildId).template', '$1.java' -} - -compileCommonVersionJava.dependsOn GitBuildId - -task CommonUtilsJar(type: Jar) { - from sourceSets.commonUtils.output - - archiveFileName = 'CommonUtils-gwt.jar' -} - -task CommonUtilsGwtJar(type: Jar) { - from sourceSets.commonUtils.output - // TODO: all Java files are flattened in the JAR! - from sourceSets.commonUtils.allJava - from 'src/com/google/appinventor/common/CommonUtils.gwt.xml' - - archiveFileName = 'CommonUtils-gwt.jar' -} - -task CommonVersionJar(type: Jar) { - from sourceSets.commonVersion.output - - archiveFileName = 'CommonVersion.jar' -} - -task CommonVersionGwtJar(type: Jar) { - from sourceSets.commonVersion.output - // TODO: see above - from sourceSets.commonVersion.allJava - from 'src/com/google/appinventor/common/CommonVersion.gwt.xml' - - archiveFileName = 'CommonVersion-gwt.jar' -} \ No newline at end of file diff --git a/appinventor/common/build.gradle.kts b/appinventor/common/build.gradle.kts new file mode 100644 index 00000000000..ab46a67c08e --- /dev/null +++ b/appinventor/common/build.gradle.kts @@ -0,0 +1,112 @@ +import org.apache.tools.ant.filters.ReplaceTokens +import java.util.Calendar +import java.text.SimpleDateFormat + +plugins { + `java-library` +} + +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +val commonUtils = sourceSets.creating { + compileClasspath += sourceSets.getByName("main").output + runtimeClasspath += sourceSets.getByName("main").output + java { + setSrcDirs(listOf("src/com/google/appinventor/common/utils/")) + } +// TODO: breaks when commonUtils & commonVersion both have same resources dir +// resources { +// srcDirs = ["src/com/google/appinventor/common/"] +// include "CommonUtils.gwt.xml" +// } +} +val commonVersion = sourceSets.creating { + java { + setSrcDirs( + listOf( + "src/com/google/appinventor/common/version/", + "$buildDir/generated/src/com/google/appinventor/common/version/" + ) + ) + } +// TODO: see above +// resources { +// srcDirs = ["src/com/google/appinventor/common/"] +// include "CommonVersion.gwt.xml" +// } +} + +//val commonUtilsImplementation by configurations + +dependencies { + implementation("com.google.guava:guava:14.0.1") +} + +defaultTasks("CommonUtilsJar", "CommonUtilsGwtJar", "CommonVersionJar", "CommonVersionGwtJar") + +val taskGitBuildId = tasks.registering(Copy::class) { + from("GitBuildId.template") + into("$buildDir/generated/") + + filter( + ReplaceTokens::class, mapOf( + "git.build.version" to execute("git describe --dirty"), + "git.build.fingerprint" to execute("git rev-parse HEAD"), + "ant.build.date" to getDate(), + "acra.uri" to "" + ) + ) + + filteringCharset = "UTF-8" + + rename("GitBuildId.template", "GitBuildId.java") +} + +val compileJava by tasks.existing(JavaCompile::class) +compileJava.get().dependsOn(taskGitBuildId) + +tasks.register("CommonUtilsJar") { + from(commonUtils) + + archiveFileName.set("CommonUtils-gwt.jar") +} + +tasks.register("CommonUtilsGwtJar") { + from(commonUtils) + // TODO: all Java files are flattened in the JAR! +// from(commonUtils.allJava) + from("src/com/google/appinventor/common/CommonUtils.gwt.xml") + + archiveFileName.set("CommonUtils-gwt.jar") +} + +tasks.register("CommonVersionJar") { + from(commonVersion) + + archiveFileName.set("CommonVersion.jar") +} + +tasks.register("CommonVersionGwtJar") { + from(commonVersion) + // TODO: see above +// from(commonVersion.allJava) + from("src/com/google/appinventor/common/CommonVersion.gwt.xml") + + archiveFileName.set("CommonVersion-gwt.jar") +} + +fun execute(command: String): String { + val process = Runtime.getRuntime().exec(command) + val output = process.inputStream.bufferedReader().readText() + process.waitFor() + return output.trim() +} + +fun getDate(): String { + val date = Calendar.getInstance().time + val formatter = SimpleDateFormat("MMMM dd yyyy") + return formatter.format(date) +} \ No newline at end of file diff --git a/appinventor/settings.gradle b/appinventor/settings.gradle deleted file mode 100644 index 788d17b636b..00000000000 --- a/appinventor/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -rootProject.name = 'appinventor' -include 'blocklyeditor', 'common', 'components' \ No newline at end of file diff --git a/appinventor/settings.gradle.kts b/appinventor/settings.gradle.kts new file mode 100644 index 00000000000..678b4d46e4f --- /dev/null +++ b/appinventor/settings.gradle.kts @@ -0,0 +1,3 @@ +rootProject.name = "appinventor" +include("blocklyeditor", "common", "components", "buildserver", "appengine") +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file From 780a1417d1c9b05840a18bec9599c97e45787b01 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 01:25:28 +0530 Subject: [PATCH 07/35] Add deps in buildserver --- appinventor/buildserver/build.gradle.kts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/appinventor/buildserver/build.gradle.kts b/appinventor/buildserver/build.gradle.kts index a24978ed0d6..5726d11ccab 100644 --- a/appinventor/buildserver/build.gradle.kts +++ b/appinventor/buildserver/build.gradle.kts @@ -24,8 +24,6 @@ repositories { mavenCentral() } -println(projects.common.artifacts) - dependencies { implementation(projects.common) implementation(fileTree("lib") { include("*.jar") }) @@ -33,4 +31,12 @@ dependencies { implementation("args4j:args4j:2.0.22") implementation("com.google.guava:guava:14.0.1") implementation("commons-io:commons-io:2.0.1") + implementation("org.bouncycastle:bcprov-jdk15on:1.49") + implementation("org.bouncycastle:bcpkix-jdk15on:1.49") + implementation("org.eclipse.jdt.core.compiler:ecj:4.5.1") + implementation("com.android.tools:common:24.3.0") + implementation("com.android.tools:sdk-common:24.3.0") + implementation("com.android.tools:sdklib:24.3.0") + implementation("com.android.tools.build:builder:1.3.0") + implementation("com.android.tools.build:builder-model:1.3.0") } \ No newline at end of file From b8a0253bbf8c901a22e3b2a672a3c35fe1642d14 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 01:25:43 +0530 Subject: [PATCH 08/35] fix common --- appinventor/common/build.gradle.kts | 126 +++++++++++++++------------- 1 file changed, 69 insertions(+), 57 deletions(-) diff --git a/appinventor/common/build.gradle.kts b/appinventor/common/build.gradle.kts index ab46a67c08e..1a88d1d3fca 100644 --- a/appinventor/common/build.gradle.kts +++ b/appinventor/common/build.gradle.kts @@ -11,19 +11,39 @@ java { targetCompatibility = JavaVersion.VERSION_1_8 } -val commonUtils = sourceSets.creating { - compileClasspath += sourceSets.getByName("main").output - runtimeClasspath += sourceSets.getByName("main").output +val taskGitBuildId by tasks.creating(Copy::class) { + from("GitBuildId.template") + into("$buildDir/generated/") + + filter( + ReplaceTokens::class, mapOf( + "git.build.version" to execute("git describe --dirty"), + "git.build.fingerprint" to execute("git rev-parse HEAD"), + "ant.build.date" to getDate(), + "acra.uri" to "" + ) + ) + + filteringCharset = "UTF-8" + + rename("GitBuildId.template", "GitBuildId.java") +} + +val commonUtilsImplementation: Configuration by configurations.creating + +val commonUtils: SourceSet by sourceSets.creating { + compileClasspath += commonUtilsImplementation + runtimeClasspath += commonUtilsImplementation java { setSrcDirs(listOf("src/com/google/appinventor/common/utils/")) } -// TODO: breaks when commonUtils & commonVersion both have same resources dir -// resources { -// srcDirs = ["src/com/google/appinventor/common/"] -// include "CommonUtils.gwt.xml" -// } + // TODO: breaks when commonUtils & commonVersion both have same resources dir + // resources { + // srcDirs = ["src/com/google/appinventor/common/"] + // include "CommonUtils.gwt.xml" + // } } -val commonVersion = sourceSets.creating { +val commonVersion: SourceSet by sourceSets.creating { java { setSrcDirs( listOf( @@ -31,71 +51,63 @@ val commonVersion = sourceSets.creating { "$buildDir/generated/src/com/google/appinventor/common/version/" ) ) + compiledBy(taskGitBuildId) } -// TODO: see above -// resources { -// srcDirs = ["src/com/google/appinventor/common/"] -// include "CommonVersion.gwt.xml" -// } + // TODO: see above + // resources { + // srcDirs = ["src/com/google/appinventor/common/"] + // include "CommonVersion.gwt.xml" + // } } -//val commonUtilsImplementation by configurations +repositories { + mavenCentral() +} dependencies { - implementation("com.google.guava:guava:14.0.1") + commonUtilsImplementation("com.google.guava:guava:14.0.1") } -defaultTasks("CommonUtilsJar", "CommonUtilsGwtJar", "CommonVersionJar", "CommonVersionGwtJar") +//defaultTasks("CommonUtilsJar", "CommonUtilsGwtJar", "CommonVersionJar", "CommonVersionGwtJar") -val taskGitBuildId = tasks.registering(Copy::class) { - from("GitBuildId.template") - into("$buildDir/generated/") +tasks { - filter( - ReplaceTokens::class, mapOf( - "git.build.version" to execute("git describe --dirty"), - "git.build.fingerprint" to execute("git rev-parse HEAD"), - "ant.build.date" to getDate(), - "acra.uri" to "" - ) - ) - - filteringCharset = "UTF-8" - - rename("GitBuildId.template", "GitBuildId.java") -} - -val compileJava by tasks.existing(JavaCompile::class) -compileJava.get().dependsOn(taskGitBuildId) + val taskCommonUtilsJar by creating(Jar::class) { + from(commonUtils.allSource) -tasks.register("CommonUtilsJar") { - from(commonUtils) + archiveFileName.set("CommonUtils.jar") + } - archiveFileName.set("CommonUtils-gwt.jar") -} + val taskCommonUtilsGwtJar by creating(Jar::class) { + from(commonUtils.allSource) +// // TODO: all Java files are flattened in the JAR! +// from(commonUtils.allJava) + from("src/com/google/appinventor/common/CommonUtils.gwt.xml") -tasks.register("CommonUtilsGwtJar") { - from(commonUtils) - // TODO: all Java files are flattened in the JAR! -// from(commonUtils.allJava) - from("src/com/google/appinventor/common/CommonUtils.gwt.xml") + archiveFileName.set("CommonUtils-gwt.jar") + } - archiveFileName.set("CommonUtils-gwt.jar") -} + val taskCommonVersionJar by creating(Jar::class) { + from(commonVersion.allSource) -tasks.register("CommonVersionJar") { - from(commonVersion) + archiveFileName.set("CommonVersion.jar") + } - archiveFileName.set("CommonVersion.jar") -} + val taskCommonVersionGwtJar by creating(Jar::class) { + from(commonVersion.allSource) +// // TODO: see above +// from(commonVersion.allJava) + from("src/com/google/appinventor/common/CommonVersion.gwt.xml") -tasks.register("CommonVersionGwtJar") { - from(commonVersion) - // TODO: see above -// from(commonVersion.allJava) - from("src/com/google/appinventor/common/CommonVersion.gwt.xml") + archiveFileName.set("CommonVersion-gwt.jar") + } - archiveFileName.set("CommonVersion-gwt.jar") + artifacts { + archives(taskCommonUtilsJar) + archives(taskCommonUtilsGwtJar) + archives(taskCommonVersionJar) + archives(taskCommonVersionGwtJar) + } } fun execute(command: String): String { From 40b7fbce61d47b5a30464b282c0e6004695ca24b Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 01:45:14 +0530 Subject: [PATCH 09/35] create new module - utils --- appinventor/buildserver/build.gradle.kts | 2 +- appinventor/settings.gradle.kts | 2 +- .../common => utils}/CommonUtils.gwt.xml | 0 appinventor/utils/build.gradle.kts | 30 +++ .../common/utils/FilenameUtils.java | 0 .../appinventor/common/utils/StringUtils.java | 0 .../common/utils/FilenameUtilsTest.java | 38 +++ .../common/utils/StringUtilsTest.java | 251 ++++++++++++++++++ 8 files changed, 321 insertions(+), 2 deletions(-) rename appinventor/{common/src/com/google/appinventor/common => utils}/CommonUtils.gwt.xml (100%) create mode 100644 appinventor/utils/build.gradle.kts rename appinventor/{common => utils}/src/com/google/appinventor/common/utils/FilenameUtils.java (100%) rename appinventor/{common => utils}/src/com/google/appinventor/common/utils/StringUtils.java (100%) create mode 100644 appinventor/utils/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java create mode 100644 appinventor/utils/tests/com/google/appinventor/common/utils/StringUtilsTest.java diff --git a/appinventor/buildserver/build.gradle.kts b/appinventor/buildserver/build.gradle.kts index 5726d11ccab..140cdde4c8b 100644 --- a/appinventor/buildserver/build.gradle.kts +++ b/appinventor/buildserver/build.gradle.kts @@ -25,7 +25,7 @@ repositories { } dependencies { - implementation(projects.common) + implementation(projects.utils) implementation(fileTree("lib") { include("*.jar") }) implementation("org.json:json:20220320") implementation("args4j:args4j:2.0.22") diff --git a/appinventor/settings.gradle.kts b/appinventor/settings.gradle.kts index 678b4d46e4f..f82ee1da8fd 100644 --- a/appinventor/settings.gradle.kts +++ b/appinventor/settings.gradle.kts @@ -1,3 +1,3 @@ rootProject.name = "appinventor" -include("blocklyeditor", "common", "components", "buildserver", "appengine") +include("blocklyeditor", "utils", "components", "buildserver", "appengine") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file diff --git a/appinventor/common/src/com/google/appinventor/common/CommonUtils.gwt.xml b/appinventor/utils/CommonUtils.gwt.xml similarity index 100% rename from appinventor/common/src/com/google/appinventor/common/CommonUtils.gwt.xml rename to appinventor/utils/CommonUtils.gwt.xml diff --git a/appinventor/utils/build.gradle.kts b/appinventor/utils/build.gradle.kts new file mode 100644 index 00000000000..1ddf8657a34 --- /dev/null +++ b/appinventor/utils/build.gradle.kts @@ -0,0 +1,30 @@ +plugins { + id("org.docstr.gwt") version "1.1.21" +} + +gwt { + gwtVersion = "2.8.1" + +} + +sourceSets { + main { + java { + setSrcDirs(listOf("src")) + } + } + + test { + java { + setSrcDirs(listOf("tests")) + } + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation("com.google.guava:guava:14.0.1") +} \ No newline at end of file diff --git a/appinventor/common/src/com/google/appinventor/common/utils/FilenameUtils.java b/appinventor/utils/src/com/google/appinventor/common/utils/FilenameUtils.java similarity index 100% rename from appinventor/common/src/com/google/appinventor/common/utils/FilenameUtils.java rename to appinventor/utils/src/com/google/appinventor/common/utils/FilenameUtils.java diff --git a/appinventor/common/src/com/google/appinventor/common/utils/StringUtils.java b/appinventor/utils/src/com/google/appinventor/common/utils/StringUtils.java similarity index 100% rename from appinventor/common/src/com/google/appinventor/common/utils/StringUtils.java rename to appinventor/utils/src/com/google/appinventor/common/utils/StringUtils.java diff --git a/appinventor/utils/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java b/appinventor/utils/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java new file mode 100644 index 00000000000..2119814a15b --- /dev/null +++ b/appinventor/utils/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java @@ -0,0 +1,38 @@ +// -*- mode: java; c-basic-offset: 2; -*- +// Copyright 2009-2011 Google, All Rights reserved +// Copyright 2011-2012 MIT, All rights reserved +// Released under the Apache License, Version 2.0 +// http://www.apache.org/licenses/LICENSE-2.0 + +package com.google.appinventor.common.utils; + +import junit.framework.TestCase; + +/** + * Checks functionality of filename helper functions. + * + * @see FilenameUtils + * + */ +public class FilenameUtilsTest extends TestCase { + + /** + * Tests file extension extraction. + * + * @see FilenameUtils#getExtension(String) + */ + public void testGetExtension() { + assertEquals("", FilenameUtils.getExtension("")); + assertEquals("", FilenameUtils.getExtension("foo")); + assertEquals("java", FilenameUtils.getExtension("foo.java")); + assertEquals("cpp", FilenameUtils.getExtension("foo.java.cpp")); + assertEquals("", FilenameUtils.getExtension("/a.b.c/foo")); + assertEquals("cpp", FilenameUtils.getExtension("/a.b.c/foo.java.cpp")); + + try { + FilenameUtils.getExtension(null); + fail(); + } catch (NullPointerException expected) { + } + } +} diff --git a/appinventor/utils/tests/com/google/appinventor/common/utils/StringUtilsTest.java b/appinventor/utils/tests/com/google/appinventor/common/utils/StringUtilsTest.java new file mode 100644 index 00000000000..c78fb04cfae --- /dev/null +++ b/appinventor/utils/tests/com/google/appinventor/common/utils/StringUtilsTest.java @@ -0,0 +1,251 @@ +// -*- mode: java; c-basic-offset: 2; -*- +// Copyright 2009-2011 Google, All Rights reserved +// Copyright 2011-2012 MIT, All rights reserved +// Released under the Apache License, Version 2.0 +// http://www.apache.org/licenses/LICENSE-2.0 + +package com.google.appinventor.common.utils; + +import junit.framework.TestCase; + +/** + * Checks functionality of string helper functions. + * + * @see StringUtils + * + */ +public class StringUtilsTest extends TestCase { + + /** + * Tests quoting a string. + * + * @see StringUtils#quote(String) + */ + public void testQuote() { + assertEquals("\"\"", StringUtils.quote("")); + assertEquals("\"Hello\"", StringUtils.quote("Hello")); + + try { + StringUtils.unquote(null); + fail(); + } catch (NullPointerException expected) { + // expected + } + } + + /** + * Tests unquoting a string. + * + * @see StringUtils#unquote(String) + */ + public void testUnquote() { + assertEquals("Hello", StringUtils.unquote("\"Hello\"")); + assertEquals("", StringUtils.unquote("\"\"")); + + try { + StringUtils.unquote(null); + fail(); + } catch (NullPointerException expected) { + // expected + } + + try { + StringUtils.unquote(""); + fail(); + } catch (IllegalArgumentException expected) { + // expected + } + + try { + StringUtils.unquote("\""); + fail(); + } catch (IllegalArgumentException expected) { + // expected + } + + try { + StringUtils.unquote("Hello"); + fail(); + } catch (IllegalArgumentException expected) { + // expected + } + + try { + StringUtils.unquote("\"Hello"); + fail(); + } catch (IllegalArgumentException expected) { + // expected + } + + try { + StringUtils.unquote("Hello\""); + fail(); + } catch (IllegalArgumentException expected) { + // expected + } + } + + /** + * Tests escaping a string for use in HTML. + * + * @see StringUtils#escape(String) + */ + public void testEscape() { + assertEquals(null, StringUtils.escape(null)); + assertEquals("&<>"
", StringUtils.escape("&<>\"\n")); + } + + /** + * Tests whether a string is contained in an array. + * + * @see StringUtils#contains(String[], String) + */ + public void testContains() { + assertTrue(StringUtils.contains(new String[] { "a", "" }, "")); + assertTrue(StringUtils.contains(new String[] { "a", "" }, "a")); + assertFalse(StringUtils.contains(new String[] { "a", "b" }, "")); + assertFalse(StringUtils.contains(new String[] { }, "")); + + try { + StringUtils.contains(null, ""); + fail(); + } catch (NullPointerException expected) { + // expected + } + + try { + StringUtils.contains(new String[] { "" }, null); + fail(); + } catch (NullPointerException expected) { + // expected + } + } + + /** + * Tests joining strings. + * + * @see StringUtils#join(String, String[]) + */ + public void testJoin() { + assertEquals("", StringUtils.join("", new String[0])); + assertEquals("", StringUtils.join("+", new String[0])); + + assertEquals("foo", StringUtils.join("", new String[] { "foo" })); + assertEquals("foo", StringUtils.join("+", new String[] { "foo" })); + + assertEquals("foofaafee", StringUtils.join("", new String[] { "foo", "faa", "fee" })); + assertEquals("foo+faa+fee", StringUtils.join("+", new String[] { "foo", "faa", "fee" })); + + try { + StringUtils.join(null, new String[0]); + fail(); + } catch (NullPointerException expected) { + // expected + } + + try { + StringUtils.join("", (String[]) null); + fail(); + } catch (NullPointerException expected) { + // expected + } + } + + public void testUserToPackageName() { + assertEquals("appinventor.ai_joeuser", + StringUtils.userToPackageName("joeuser@gmail.com")); + assertEquals("appinventor.ai_JoeUser", + StringUtils.userToPackageName("JoeUser@gmail.com")); + assertEquals("appinventor.ai_deb_achwall", + StringUtils.userToPackageName("deb.achwall@gmail.com")); + assertEquals("appinventor.ai_123456", + StringUtils.userToPackageName("123456@gmail.com")); + assertEquals("appinventor.ai_kenny", + StringUtils.userToPackageName("kenny@some-domain.com")); + assertEquals("appinventor.ai_JeanMichel_Cousteau", + StringUtils.userToPackageName("Jean-Michel.Cousteau@gmail.com")); + assertEquals("appinventor.ai_Keha", + StringUtils.userToPackageName("Ke$ha@gmail.com")); + } + + public void testReplaceLastOccurrence() { + // Test situation similar to Save As for project named HelloPurr. + assertEquals("appinventor.ai_joeuser.HelloPurr_copy.Screen1", + StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.HelloPurr.Screen1", + ".HelloPurr.", ".HelloPurr_copy.")); + assertEquals("src/appinventor/ai_joeuser/HelloPurr_copy/Screen1.blk", + StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/HelloPurr/Screen1.blk", + "/HelloPurr/", "/HelloPurr_copy/")); + + // Test situation similar to Checkpoint for project named HelloPurr. + assertEquals("appinventor.ai_joeuser.HelloPurr_checkpoint1.Screen1", + StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.HelloPurr.Screen1", + ".HelloPurr.", ".HelloPurr_checkpoint1.")); + assertEquals("src/appinventor/ai_joeuser/HelloPurr_checkpoint1/Screen1.blk", + StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/HelloPurr/Screen1.blk", + "/HelloPurr/", "/HelloPurr_checkpoint1/")); + + // Test situation similar to Save As for project named appinventor. + assertEquals("appinventor.ai_joeuser.appinventor_copy.Screen1", + StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.appinventor.Screen1", + ".appinventor.", ".appinventor_copy.")); + assertEquals("src/appinventor/ai_joeuser/appinventor_copy/Screen1.blk", + StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/appinventor/Screen1.blk", + "/appinventor/", "/appinventor_copy/")); + + // Test situation similar to Checkpoint for project named appinventor. + assertEquals("appinventor.ai_joeuser.appinventor_checkpoint1.Screen1", + StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.appinventor.Screen1", + ".appinventor.", ".appinventor_checkpoint1.")); + assertEquals("src/appinventor/ai_joeuser/appinventor_checkpoint1/Screen1.blk", + StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/appinventor/Screen1.blk", + "/appinventor/", "/appinventor_checkpoint1/")); + + // Test situation similar to Save As for project named ai_joeuser. + assertEquals("appinventor.ai_joeuser.ai_joeuser_copy.Screen1", + StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.ai_joeuser.Screen1", + ".ai_joeuser.", ".ai_joeuser_copy.")); + assertEquals("src/appinventor/ai_joeuser/ai_joeuser_copy/Screen1.blk", + StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/ai_joeuser/Screen1.blk", + "/ai_joeuser/", "/ai_joeuser_copy/")); + + // Test situation similar to Checkpoint for project named ai_joeuser. + assertEquals("appinventor.ai_joeuser.ai_joeuser_checkpoint1.Screen1", + StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.ai_joeuser.Screen1", + ".ai_joeuser.", ".ai_joeuser_checkpoint1.")); + assertEquals("src/appinventor/ai_joeuser/ai_joeuser_checkpoint1/Screen1.blk", + StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/ai_joeuser/Screen1.blk", + "/ai_joeuser/", "/ai_joeuser_checkpoint1/")); + + // Test situation where string is empty. + assertEquals("", + StringUtils.replaceLastOccurrence("", "5", "$")); + + // Test situation where target is empty. + assertEquals("0123456789", + StringUtils.replaceLastOccurrence("0123456789", "", "$")); + + // Test situation where replacement is empty. + assertEquals("012346789", + StringUtils.replaceLastOccurrence("0123456789", "5", "")); + + // Test situation where target doesn't exist. + assertEquals("0123456789", + StringUtils.replaceLastOccurrence("0123456789", "A", "$")); + } + + public void testValidFilenameChars() { + assertTrue(StringUtils.VALID_FILENAME_CHARS.matchesAllOf("myfilename.zip")); + assertTrue(StringUtils.VALID_FILENAME_CHARS.matchesAllOf("MyFilename.ZiP")); + assertTrue(StringUtils.VALID_FILENAME_CHARS.matchesAllOf("myfilename2.zip")); + assertTrue(StringUtils.VALID_FILENAME_CHARS.matchesAllOf("my3filena-me.zip")); + assertTrue(StringUtils.VALID_FILENAME_CHARS.matchesNoneOf("!@#$%^&*()\"';:<>,/?")); + } + + public void testNormalizeForFilename() { + assertEquals("MyAppInventorProject1", + StringUtils.normalizeForFilename("My App Inventor Project 1")); + assertEquals("testproject4", + StringUtils.normalizeForFilename("1 2 3 test project 4")); + } +} From 06f58a64b73ef55c43b93075d68e7436d261bbfb Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 02:06:04 +0530 Subject: [PATCH 10/35] split "common" module --- appinventor/buildserver/build.gradle.kts | 3 +- .../{utils => common-utils}/build.gradle.kts | 1 - .../appinventor/common/CommonUtils.gwt.xml | 6 + .../common/utils/FilenameUtils.java | 0 .../appinventor/common/utils/StringUtils.java | 0 .../common/utils/FilenameUtilsTest.java | 0 .../common/utils/StringUtilsTest.java | 0 .../GitBuildId.template | 0 appinventor/common-version/build.gradle.kts | 64 +++++ .../{common => common-version}/build.xml | 0 .../appinventor/common/CommonVersion.gwt.xml | 0 .../common/testutils/TestUtils.java | 0 .../common/testutils/package-info.java | 0 .../common/version/AppInventorFeatures.java | 0 .../common/version/package-info.java | 0 appinventor/common/build.gradle.kts | 124 --------- .../appinventor/common/package-info.java | 9 - .../common/utils/package-info.java | 9 - appinventor/settings.gradle.kts | 4 +- appinventor/utils/CommonUtils.gwt.xml | 4 - .../common/utils/FilenameUtilsTest.java | 38 --- .../common/utils/StringUtilsTest.java | 251 ------------------ 22 files changed, 74 insertions(+), 439 deletions(-) rename appinventor/{utils => common-utils}/build.gradle.kts (98%) create mode 100644 appinventor/common-utils/src/com/google/appinventor/common/CommonUtils.gwt.xml rename appinventor/{utils => common-utils}/src/com/google/appinventor/common/utils/FilenameUtils.java (100%) rename appinventor/{utils => common-utils}/src/com/google/appinventor/common/utils/StringUtils.java (100%) rename appinventor/{common => common-utils}/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java (100%) rename appinventor/{common => common-utils}/tests/com/google/appinventor/common/utils/StringUtilsTest.java (100%) rename appinventor/{common => common-version}/GitBuildId.template (100%) create mode 100644 appinventor/common-version/build.gradle.kts rename appinventor/{common => common-version}/build.xml (100%) rename appinventor/{common => common-version}/src/com/google/appinventor/common/CommonVersion.gwt.xml (100%) rename appinventor/{common => common-version}/src/com/google/appinventor/common/testutils/TestUtils.java (100%) rename appinventor/{common => common-version}/src/com/google/appinventor/common/testutils/package-info.java (100%) rename appinventor/{common => common-version}/src/com/google/appinventor/common/version/AppInventorFeatures.java (100%) rename appinventor/{common => common-version}/src/com/google/appinventor/common/version/package-info.java (100%) delete mode 100644 appinventor/common/build.gradle.kts delete mode 100644 appinventor/common/src/com/google/appinventor/common/package-info.java delete mode 100644 appinventor/common/src/com/google/appinventor/common/utils/package-info.java delete mode 100644 appinventor/utils/CommonUtils.gwt.xml delete mode 100644 appinventor/utils/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java delete mode 100644 appinventor/utils/tests/com/google/appinventor/common/utils/StringUtilsTest.java diff --git a/appinventor/buildserver/build.gradle.kts b/appinventor/buildserver/build.gradle.kts index 140cdde4c8b..9729b24d69f 100644 --- a/appinventor/buildserver/build.gradle.kts +++ b/appinventor/buildserver/build.gradle.kts @@ -25,7 +25,8 @@ repositories { } dependencies { - implementation(projects.utils) + implementation(projects.commonUtils) + implementation(projects.commonVersion) implementation(fileTree("lib") { include("*.jar") }) implementation("org.json:json:20220320") implementation("args4j:args4j:2.0.22") diff --git a/appinventor/utils/build.gradle.kts b/appinventor/common-utils/build.gradle.kts similarity index 98% rename from appinventor/utils/build.gradle.kts rename to appinventor/common-utils/build.gradle.kts index 1ddf8657a34..ca3f99e7af1 100644 --- a/appinventor/utils/build.gradle.kts +++ b/appinventor/common-utils/build.gradle.kts @@ -4,7 +4,6 @@ plugins { gwt { gwtVersion = "2.8.1" - } sourceSets { diff --git a/appinventor/common-utils/src/com/google/appinventor/common/CommonUtils.gwt.xml b/appinventor/common-utils/src/com/google/appinventor/common/CommonUtils.gwt.xml new file mode 100644 index 00000000000..47403ca9abb --- /dev/null +++ b/appinventor/common-utils/src/com/google/appinventor/common/CommonUtils.gwt.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/appinventor/utils/src/com/google/appinventor/common/utils/FilenameUtils.java b/appinventor/common-utils/src/com/google/appinventor/common/utils/FilenameUtils.java similarity index 100% rename from appinventor/utils/src/com/google/appinventor/common/utils/FilenameUtils.java rename to appinventor/common-utils/src/com/google/appinventor/common/utils/FilenameUtils.java diff --git a/appinventor/utils/src/com/google/appinventor/common/utils/StringUtils.java b/appinventor/common-utils/src/com/google/appinventor/common/utils/StringUtils.java similarity index 100% rename from appinventor/utils/src/com/google/appinventor/common/utils/StringUtils.java rename to appinventor/common-utils/src/com/google/appinventor/common/utils/StringUtils.java diff --git a/appinventor/common/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java b/appinventor/common-utils/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java similarity index 100% rename from appinventor/common/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java rename to appinventor/common-utils/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java diff --git a/appinventor/common/tests/com/google/appinventor/common/utils/StringUtilsTest.java b/appinventor/common-utils/tests/com/google/appinventor/common/utils/StringUtilsTest.java similarity index 100% rename from appinventor/common/tests/com/google/appinventor/common/utils/StringUtilsTest.java rename to appinventor/common-utils/tests/com/google/appinventor/common/utils/StringUtilsTest.java diff --git a/appinventor/common/GitBuildId.template b/appinventor/common-version/GitBuildId.template similarity index 100% rename from appinventor/common/GitBuildId.template rename to appinventor/common-version/GitBuildId.template diff --git a/appinventor/common-version/build.gradle.kts b/appinventor/common-version/build.gradle.kts new file mode 100644 index 00000000000..f8c64f6822e --- /dev/null +++ b/appinventor/common-version/build.gradle.kts @@ -0,0 +1,64 @@ +import org.apache.tools.ant.filters.ReplaceTokens +import java.util.Calendar +import java.text.SimpleDateFormat + +plugins { + id("org.docstr.gwt") version "1.1.21" +} + +gwt { + gwtVersion = "2.8.1" +} + +val taskGitBuildId by tasks.creating(Copy::class) { + from("GitBuildId.template") + into("$buildDir/generated/") + + filter( + ReplaceTokens::class, mapOf( + "git.build.version" to execute("git describe --dirty"), + "git.build.fingerprint" to execute("git rev-parse HEAD"), + "ant.build.date" to getDate(), + "acra.uri" to "" + ) + ) + + filteringCharset = "UTF-8" + + rename("GitBuildId.template", "GitBuildId.java") +} + +sourceSets { + main { + java { + setSrcDirs(listOf("src")) + } + } + + test { + java { + setSrcDirs(listOf("tests")) + } + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation("com.google.guava:guava:14.0.1") +} + +fun execute(command: String): String { + val process = Runtime.getRuntime().exec(command) + val output = process.inputStream.bufferedReader().readText() + process.waitFor() + return output.trim() +} + +fun getDate(): String { + val date = Calendar.getInstance().time + val formatter = SimpleDateFormat("MMMM dd yyyy") + return formatter.format(date) +} \ No newline at end of file diff --git a/appinventor/common/build.xml b/appinventor/common-version/build.xml similarity index 100% rename from appinventor/common/build.xml rename to appinventor/common-version/build.xml diff --git a/appinventor/common/src/com/google/appinventor/common/CommonVersion.gwt.xml b/appinventor/common-version/src/com/google/appinventor/common/CommonVersion.gwt.xml similarity index 100% rename from appinventor/common/src/com/google/appinventor/common/CommonVersion.gwt.xml rename to appinventor/common-version/src/com/google/appinventor/common/CommonVersion.gwt.xml diff --git a/appinventor/common/src/com/google/appinventor/common/testutils/TestUtils.java b/appinventor/common-version/src/com/google/appinventor/common/testutils/TestUtils.java similarity index 100% rename from appinventor/common/src/com/google/appinventor/common/testutils/TestUtils.java rename to appinventor/common-version/src/com/google/appinventor/common/testutils/TestUtils.java diff --git a/appinventor/common/src/com/google/appinventor/common/testutils/package-info.java b/appinventor/common-version/src/com/google/appinventor/common/testutils/package-info.java similarity index 100% rename from appinventor/common/src/com/google/appinventor/common/testutils/package-info.java rename to appinventor/common-version/src/com/google/appinventor/common/testutils/package-info.java diff --git a/appinventor/common/src/com/google/appinventor/common/version/AppInventorFeatures.java b/appinventor/common-version/src/com/google/appinventor/common/version/AppInventorFeatures.java similarity index 100% rename from appinventor/common/src/com/google/appinventor/common/version/AppInventorFeatures.java rename to appinventor/common-version/src/com/google/appinventor/common/version/AppInventorFeatures.java diff --git a/appinventor/common/src/com/google/appinventor/common/version/package-info.java b/appinventor/common-version/src/com/google/appinventor/common/version/package-info.java similarity index 100% rename from appinventor/common/src/com/google/appinventor/common/version/package-info.java rename to appinventor/common-version/src/com/google/appinventor/common/version/package-info.java diff --git a/appinventor/common/build.gradle.kts b/appinventor/common/build.gradle.kts deleted file mode 100644 index 1a88d1d3fca..00000000000 --- a/appinventor/common/build.gradle.kts +++ /dev/null @@ -1,124 +0,0 @@ -import org.apache.tools.ant.filters.ReplaceTokens -import java.util.Calendar -import java.text.SimpleDateFormat - -plugins { - `java-library` -} - -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -val taskGitBuildId by tasks.creating(Copy::class) { - from("GitBuildId.template") - into("$buildDir/generated/") - - filter( - ReplaceTokens::class, mapOf( - "git.build.version" to execute("git describe --dirty"), - "git.build.fingerprint" to execute("git rev-parse HEAD"), - "ant.build.date" to getDate(), - "acra.uri" to "" - ) - ) - - filteringCharset = "UTF-8" - - rename("GitBuildId.template", "GitBuildId.java") -} - -val commonUtilsImplementation: Configuration by configurations.creating - -val commonUtils: SourceSet by sourceSets.creating { - compileClasspath += commonUtilsImplementation - runtimeClasspath += commonUtilsImplementation - java { - setSrcDirs(listOf("src/com/google/appinventor/common/utils/")) - } - // TODO: breaks when commonUtils & commonVersion both have same resources dir - // resources { - // srcDirs = ["src/com/google/appinventor/common/"] - // include "CommonUtils.gwt.xml" - // } -} -val commonVersion: SourceSet by sourceSets.creating { - java { - setSrcDirs( - listOf( - "src/com/google/appinventor/common/version/", - "$buildDir/generated/src/com/google/appinventor/common/version/" - ) - ) - compiledBy(taskGitBuildId) - } - // TODO: see above - // resources { - // srcDirs = ["src/com/google/appinventor/common/"] - // include "CommonVersion.gwt.xml" - // } -} - -repositories { - mavenCentral() -} - -dependencies { - commonUtilsImplementation("com.google.guava:guava:14.0.1") -} - -//defaultTasks("CommonUtilsJar", "CommonUtilsGwtJar", "CommonVersionJar", "CommonVersionGwtJar") - -tasks { - - val taskCommonUtilsJar by creating(Jar::class) { - from(commonUtils.allSource) - - archiveFileName.set("CommonUtils.jar") - } - - val taskCommonUtilsGwtJar by creating(Jar::class) { - from(commonUtils.allSource) -// // TODO: all Java files are flattened in the JAR! -// from(commonUtils.allJava) - from("src/com/google/appinventor/common/CommonUtils.gwt.xml") - - archiveFileName.set("CommonUtils-gwt.jar") - } - - val taskCommonVersionJar by creating(Jar::class) { - from(commonVersion.allSource) - - archiveFileName.set("CommonVersion.jar") - } - - val taskCommonVersionGwtJar by creating(Jar::class) { - from(commonVersion.allSource) -// // TODO: see above -// from(commonVersion.allJava) - from("src/com/google/appinventor/common/CommonVersion.gwt.xml") - - archiveFileName.set("CommonVersion-gwt.jar") - } - - artifacts { - archives(taskCommonUtilsJar) - archives(taskCommonUtilsGwtJar) - archives(taskCommonVersionJar) - archives(taskCommonVersionGwtJar) - } -} - -fun execute(command: String): String { - val process = Runtime.getRuntime().exec(command) - val output = process.inputStream.bufferedReader().readText() - process.waitFor() - return output.trim() -} - -fun getDate(): String { - val date = Calendar.getInstance().time - val formatter = SimpleDateFormat("MMMM dd yyyy") - return formatter.format(date) -} \ No newline at end of file diff --git a/appinventor/common/src/com/google/appinventor/common/package-info.java b/appinventor/common/src/com/google/appinventor/common/package-info.java deleted file mode 100644 index dec4fd205ff..00000000000 --- a/appinventor/common/src/com/google/appinventor/common/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -// -*- mode: java; c-basic-offset: 2; -*- -// Copyright 2009-2011 Google, All Rights reserved -// Copyright 2011-2012 MIT, All rights reserved -// Released under the Apache License, Version 2.0 -// http://www.apache.org/licenses/LICENSE-2.0 -/** - * Classes shared by multiple App Inventor sub-projects. - */ -package com.google.appinventor.common; diff --git a/appinventor/common/src/com/google/appinventor/common/utils/package-info.java b/appinventor/common/src/com/google/appinventor/common/utils/package-info.java deleted file mode 100644 index e9bcd05ec84..00000000000 --- a/appinventor/common/src/com/google/appinventor/common/utils/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -// -*- mode: java; c-basic-offset: 2; -*- -// Copyright 2009-2011 Google, All Rights reserved -// Copyright 2011-2012 MIT, All rights reserved -// Released under the Apache License, Version 2.0 -// http://www.apache.org/licenses/LICENSE-2.0 -/** - * Utility methods for working with filenames and strings. - */ -package com.google.appinventor.common.utils; diff --git a/appinventor/settings.gradle.kts b/appinventor/settings.gradle.kts index f82ee1da8fd..5a0085de8b3 100644 --- a/appinventor/settings.gradle.kts +++ b/appinventor/settings.gradle.kts @@ -1,3 +1,3 @@ rootProject.name = "appinventor" -include("blocklyeditor", "utils", "components", "buildserver", "appengine") -enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") \ No newline at end of file +include("blocklyeditor", "common-utils", "common-version", "components", "buildserver", "appengine") +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") diff --git a/appinventor/utils/CommonUtils.gwt.xml b/appinventor/utils/CommonUtils.gwt.xml deleted file mode 100644 index 6f22f9db8db..00000000000 --- a/appinventor/utils/CommonUtils.gwt.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/appinventor/utils/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java b/appinventor/utils/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java deleted file mode 100644 index 2119814a15b..00000000000 --- a/appinventor/utils/tests/com/google/appinventor/common/utils/FilenameUtilsTest.java +++ /dev/null @@ -1,38 +0,0 @@ -// -*- mode: java; c-basic-offset: 2; -*- -// Copyright 2009-2011 Google, All Rights reserved -// Copyright 2011-2012 MIT, All rights reserved -// Released under the Apache License, Version 2.0 -// http://www.apache.org/licenses/LICENSE-2.0 - -package com.google.appinventor.common.utils; - -import junit.framework.TestCase; - -/** - * Checks functionality of filename helper functions. - * - * @see FilenameUtils - * - */ -public class FilenameUtilsTest extends TestCase { - - /** - * Tests file extension extraction. - * - * @see FilenameUtils#getExtension(String) - */ - public void testGetExtension() { - assertEquals("", FilenameUtils.getExtension("")); - assertEquals("", FilenameUtils.getExtension("foo")); - assertEquals("java", FilenameUtils.getExtension("foo.java")); - assertEquals("cpp", FilenameUtils.getExtension("foo.java.cpp")); - assertEquals("", FilenameUtils.getExtension("/a.b.c/foo")); - assertEquals("cpp", FilenameUtils.getExtension("/a.b.c/foo.java.cpp")); - - try { - FilenameUtils.getExtension(null); - fail(); - } catch (NullPointerException expected) { - } - } -} diff --git a/appinventor/utils/tests/com/google/appinventor/common/utils/StringUtilsTest.java b/appinventor/utils/tests/com/google/appinventor/common/utils/StringUtilsTest.java deleted file mode 100644 index c78fb04cfae..00000000000 --- a/appinventor/utils/tests/com/google/appinventor/common/utils/StringUtilsTest.java +++ /dev/null @@ -1,251 +0,0 @@ -// -*- mode: java; c-basic-offset: 2; -*- -// Copyright 2009-2011 Google, All Rights reserved -// Copyright 2011-2012 MIT, All rights reserved -// Released under the Apache License, Version 2.0 -// http://www.apache.org/licenses/LICENSE-2.0 - -package com.google.appinventor.common.utils; - -import junit.framework.TestCase; - -/** - * Checks functionality of string helper functions. - * - * @see StringUtils - * - */ -public class StringUtilsTest extends TestCase { - - /** - * Tests quoting a string. - * - * @see StringUtils#quote(String) - */ - public void testQuote() { - assertEquals("\"\"", StringUtils.quote("")); - assertEquals("\"Hello\"", StringUtils.quote("Hello")); - - try { - StringUtils.unquote(null); - fail(); - } catch (NullPointerException expected) { - // expected - } - } - - /** - * Tests unquoting a string. - * - * @see StringUtils#unquote(String) - */ - public void testUnquote() { - assertEquals("Hello", StringUtils.unquote("\"Hello\"")); - assertEquals("", StringUtils.unquote("\"\"")); - - try { - StringUtils.unquote(null); - fail(); - } catch (NullPointerException expected) { - // expected - } - - try { - StringUtils.unquote(""); - fail(); - } catch (IllegalArgumentException expected) { - // expected - } - - try { - StringUtils.unquote("\""); - fail(); - } catch (IllegalArgumentException expected) { - // expected - } - - try { - StringUtils.unquote("Hello"); - fail(); - } catch (IllegalArgumentException expected) { - // expected - } - - try { - StringUtils.unquote("\"Hello"); - fail(); - } catch (IllegalArgumentException expected) { - // expected - } - - try { - StringUtils.unquote("Hello\""); - fail(); - } catch (IllegalArgumentException expected) { - // expected - } - } - - /** - * Tests escaping a string for use in HTML. - * - * @see StringUtils#escape(String) - */ - public void testEscape() { - assertEquals(null, StringUtils.escape(null)); - assertEquals("&<>"
", StringUtils.escape("&<>\"\n")); - } - - /** - * Tests whether a string is contained in an array. - * - * @see StringUtils#contains(String[], String) - */ - public void testContains() { - assertTrue(StringUtils.contains(new String[] { "a", "" }, "")); - assertTrue(StringUtils.contains(new String[] { "a", "" }, "a")); - assertFalse(StringUtils.contains(new String[] { "a", "b" }, "")); - assertFalse(StringUtils.contains(new String[] { }, "")); - - try { - StringUtils.contains(null, ""); - fail(); - } catch (NullPointerException expected) { - // expected - } - - try { - StringUtils.contains(new String[] { "" }, null); - fail(); - } catch (NullPointerException expected) { - // expected - } - } - - /** - * Tests joining strings. - * - * @see StringUtils#join(String, String[]) - */ - public void testJoin() { - assertEquals("", StringUtils.join("", new String[0])); - assertEquals("", StringUtils.join("+", new String[0])); - - assertEquals("foo", StringUtils.join("", new String[] { "foo" })); - assertEquals("foo", StringUtils.join("+", new String[] { "foo" })); - - assertEquals("foofaafee", StringUtils.join("", new String[] { "foo", "faa", "fee" })); - assertEquals("foo+faa+fee", StringUtils.join("+", new String[] { "foo", "faa", "fee" })); - - try { - StringUtils.join(null, new String[0]); - fail(); - } catch (NullPointerException expected) { - // expected - } - - try { - StringUtils.join("", (String[]) null); - fail(); - } catch (NullPointerException expected) { - // expected - } - } - - public void testUserToPackageName() { - assertEquals("appinventor.ai_joeuser", - StringUtils.userToPackageName("joeuser@gmail.com")); - assertEquals("appinventor.ai_JoeUser", - StringUtils.userToPackageName("JoeUser@gmail.com")); - assertEquals("appinventor.ai_deb_achwall", - StringUtils.userToPackageName("deb.achwall@gmail.com")); - assertEquals("appinventor.ai_123456", - StringUtils.userToPackageName("123456@gmail.com")); - assertEquals("appinventor.ai_kenny", - StringUtils.userToPackageName("kenny@some-domain.com")); - assertEquals("appinventor.ai_JeanMichel_Cousteau", - StringUtils.userToPackageName("Jean-Michel.Cousteau@gmail.com")); - assertEquals("appinventor.ai_Keha", - StringUtils.userToPackageName("Ke$ha@gmail.com")); - } - - public void testReplaceLastOccurrence() { - // Test situation similar to Save As for project named HelloPurr. - assertEquals("appinventor.ai_joeuser.HelloPurr_copy.Screen1", - StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.HelloPurr.Screen1", - ".HelloPurr.", ".HelloPurr_copy.")); - assertEquals("src/appinventor/ai_joeuser/HelloPurr_copy/Screen1.blk", - StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/HelloPurr/Screen1.blk", - "/HelloPurr/", "/HelloPurr_copy/")); - - // Test situation similar to Checkpoint for project named HelloPurr. - assertEquals("appinventor.ai_joeuser.HelloPurr_checkpoint1.Screen1", - StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.HelloPurr.Screen1", - ".HelloPurr.", ".HelloPurr_checkpoint1.")); - assertEquals("src/appinventor/ai_joeuser/HelloPurr_checkpoint1/Screen1.blk", - StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/HelloPurr/Screen1.blk", - "/HelloPurr/", "/HelloPurr_checkpoint1/")); - - // Test situation similar to Save As for project named appinventor. - assertEquals("appinventor.ai_joeuser.appinventor_copy.Screen1", - StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.appinventor.Screen1", - ".appinventor.", ".appinventor_copy.")); - assertEquals("src/appinventor/ai_joeuser/appinventor_copy/Screen1.blk", - StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/appinventor/Screen1.blk", - "/appinventor/", "/appinventor_copy/")); - - // Test situation similar to Checkpoint for project named appinventor. - assertEquals("appinventor.ai_joeuser.appinventor_checkpoint1.Screen1", - StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.appinventor.Screen1", - ".appinventor.", ".appinventor_checkpoint1.")); - assertEquals("src/appinventor/ai_joeuser/appinventor_checkpoint1/Screen1.blk", - StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/appinventor/Screen1.blk", - "/appinventor/", "/appinventor_checkpoint1/")); - - // Test situation similar to Save As for project named ai_joeuser. - assertEquals("appinventor.ai_joeuser.ai_joeuser_copy.Screen1", - StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.ai_joeuser.Screen1", - ".ai_joeuser.", ".ai_joeuser_copy.")); - assertEquals("src/appinventor/ai_joeuser/ai_joeuser_copy/Screen1.blk", - StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/ai_joeuser/Screen1.blk", - "/ai_joeuser/", "/ai_joeuser_copy/")); - - // Test situation similar to Checkpoint for project named ai_joeuser. - assertEquals("appinventor.ai_joeuser.ai_joeuser_checkpoint1.Screen1", - StringUtils.replaceLastOccurrence("appinventor.ai_joeuser.ai_joeuser.Screen1", - ".ai_joeuser.", ".ai_joeuser_checkpoint1.")); - assertEquals("src/appinventor/ai_joeuser/ai_joeuser_checkpoint1/Screen1.blk", - StringUtils.replaceLastOccurrence("src/appinventor/ai_joeuser/ai_joeuser/Screen1.blk", - "/ai_joeuser/", "/ai_joeuser_checkpoint1/")); - - // Test situation where string is empty. - assertEquals("", - StringUtils.replaceLastOccurrence("", "5", "$")); - - // Test situation where target is empty. - assertEquals("0123456789", - StringUtils.replaceLastOccurrence("0123456789", "", "$")); - - // Test situation where replacement is empty. - assertEquals("012346789", - StringUtils.replaceLastOccurrence("0123456789", "5", "")); - - // Test situation where target doesn't exist. - assertEquals("0123456789", - StringUtils.replaceLastOccurrence("0123456789", "A", "$")); - } - - public void testValidFilenameChars() { - assertTrue(StringUtils.VALID_FILENAME_CHARS.matchesAllOf("myfilename.zip")); - assertTrue(StringUtils.VALID_FILENAME_CHARS.matchesAllOf("MyFilename.ZiP")); - assertTrue(StringUtils.VALID_FILENAME_CHARS.matchesAllOf("myfilename2.zip")); - assertTrue(StringUtils.VALID_FILENAME_CHARS.matchesAllOf("my3filena-me.zip")); - assertTrue(StringUtils.VALID_FILENAME_CHARS.matchesNoneOf("!@#$%^&*()\"';:<>,/?")); - } - - public void testNormalizeForFilename() { - assertEquals("MyAppInventorProject1", - StringUtils.normalizeForFilename("My App Inventor Project 1")); - assertEquals("testproject4", - StringUtils.normalizeForFilename("1 2 3 test project 4")); - } -} From 318b3b53979972d04d895c928092ac476e02b6b2 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 02:18:07 +0530 Subject: [PATCH 11/35] create new module - component-constants --- appinventor/buildserver/build.gradle.kts | 1 + appinventor/component-constants/build.gradle.kts | 10 ++++++++++ .../appinventor/components/common/ColorSensorMode.java | 0 .../components/common/ComponentCategory.java | 0 .../components/common/ComponentConstants.java | 0 .../common/ComponentDescriptorConstants.java | 0 .../google/appinventor/components/common/Default.java | 0 .../appinventor/components/common/Direction.java | 0 .../appinventor/components/common/EndedStatus.java | 0 .../appinventor/components/common/FileScope.java | 0 .../appinventor/components/common/GyroSensorMode.java | 0 .../components/common/HorizontalAlignment.java | 0 .../appinventor/components/common/HtmlEntities.java | 0 .../appinventor/components/common/MapFeature.java | 0 .../google/appinventor/components/common/MapType.java | 0 .../appinventor/components/common/NxtMailbox.java | 0 .../appinventor/components/common/NxtMotorMode.java | 0 .../appinventor/components/common/NxtMotorPort.java | 0 .../components/common/NxtRegulationMode.java | 0 .../appinventor/components/common/NxtRunState.java | 0 .../appinventor/components/common/NxtSensorMode.java | 0 .../appinventor/components/common/NxtSensorPort.java | 0 .../appinventor/components/common/NxtSensorType.java | 0 .../appinventor/components/common/OptionList.java | 0 .../appinventor/components/common/Permission.java | 0 .../components/common/PropertyTypeConstants.java | 0 .../appinventor/components/common/ReceivingState.java | 0 .../appinventor/components/common/ScaleUnits.java | 0 .../appinventor/components/common/ScreenAnimation.java | 0 .../components/common/ScreenOrientation.java | 0 .../appinventor/components/common/Sensitivity.java | 0 .../appinventor/components/common/StartedStatus.java | 0 .../components/common/TranslationContainer.java | 0 .../appinventor/components/common/TransportMethod.java | 0 .../components/common/UltrasonicSensorUnit.java | 0 .../components/common/VerticalAlignment.java | 0 .../appinventor/components/common/YaVersion.java | 0 .../appinventor/components/common/package-info.java | 0 appinventor/components/build.gradle | 1 - appinventor/settings.gradle.kts | 8 +++++++- 40 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 appinventor/component-constants/build.gradle.kts rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/ColorSensorMode.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/ComponentCategory.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/ComponentConstants.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/ComponentDescriptorConstants.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/Default.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/Direction.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/EndedStatus.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/FileScope.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/GyroSensorMode.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/HorizontalAlignment.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/HtmlEntities.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/MapFeature.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/MapType.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/NxtMailbox.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/NxtMotorMode.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/NxtMotorPort.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/NxtRegulationMode.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/NxtRunState.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/NxtSensorMode.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/NxtSensorPort.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/NxtSensorType.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/OptionList.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/Permission.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/PropertyTypeConstants.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/ReceivingState.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/ScaleUnits.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/ScreenAnimation.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/ScreenOrientation.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/Sensitivity.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/StartedStatus.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/TranslationContainer.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/TransportMethod.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/UltrasonicSensorUnit.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/VerticalAlignment.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/YaVersion.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/package-info.java (100%) diff --git a/appinventor/buildserver/build.gradle.kts b/appinventor/buildserver/build.gradle.kts index 9729b24d69f..d717416f347 100644 --- a/appinventor/buildserver/build.gradle.kts +++ b/appinventor/buildserver/build.gradle.kts @@ -27,6 +27,7 @@ repositories { dependencies { implementation(projects.commonUtils) implementation(projects.commonVersion) + implementation(projects.componentConstants) implementation(fileTree("lib") { include("*.jar") }) implementation("org.json:json:20220320") implementation("args4j:args4j:2.0.22") diff --git a/appinventor/component-constants/build.gradle.kts b/appinventor/component-constants/build.gradle.kts new file mode 100644 index 00000000000..f3defb1aeaf --- /dev/null +++ b/appinventor/component-constants/build.gradle.kts @@ -0,0 +1,10 @@ +plugins { + `java-library` +} + +repositories { + mavenCentral() +} + +dependencies { +} \ No newline at end of file diff --git a/appinventor/components/src/com/google/appinventor/components/common/ColorSensorMode.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ColorSensorMode.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/ColorSensorMode.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ColorSensorMode.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/ComponentCategory.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ComponentCategory.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/ComponentCategory.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ComponentCategory.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/ComponentConstants.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ComponentConstants.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/ComponentConstants.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ComponentConstants.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/ComponentDescriptorConstants.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ComponentDescriptorConstants.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/ComponentDescriptorConstants.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ComponentDescriptorConstants.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/Default.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/Default.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/Default.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/Default.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/Direction.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/Direction.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/Direction.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/Direction.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/EndedStatus.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/EndedStatus.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/EndedStatus.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/EndedStatus.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/FileScope.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/FileScope.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/FileScope.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/FileScope.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/GyroSensorMode.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/GyroSensorMode.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/GyroSensorMode.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/GyroSensorMode.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/HorizontalAlignment.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/HorizontalAlignment.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/HorizontalAlignment.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/HorizontalAlignment.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/HtmlEntities.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/HtmlEntities.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/HtmlEntities.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/HtmlEntities.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/MapFeature.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/MapFeature.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/MapFeature.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/MapFeature.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/MapType.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/MapType.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/MapType.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/MapType.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/NxtMailbox.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtMailbox.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/NxtMailbox.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtMailbox.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/NxtMotorMode.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtMotorMode.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/NxtMotorMode.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtMotorMode.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/NxtMotorPort.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtMotorPort.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/NxtMotorPort.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtMotorPort.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/NxtRegulationMode.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtRegulationMode.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/NxtRegulationMode.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtRegulationMode.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/NxtRunState.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtRunState.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/NxtRunState.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtRunState.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/NxtSensorMode.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtSensorMode.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/NxtSensorMode.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtSensorMode.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/NxtSensorPort.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtSensorPort.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/NxtSensorPort.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtSensorPort.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/NxtSensorType.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtSensorType.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/NxtSensorType.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/NxtSensorType.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/OptionList.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/OptionList.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/OptionList.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/OptionList.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/Permission.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/Permission.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/Permission.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/Permission.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/PropertyTypeConstants.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/PropertyTypeConstants.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/PropertyTypeConstants.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/PropertyTypeConstants.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/ReceivingState.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ReceivingState.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/ReceivingState.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ReceivingState.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/ScaleUnits.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ScaleUnits.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/ScaleUnits.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ScaleUnits.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/ScreenAnimation.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ScreenAnimation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/ScreenAnimation.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ScreenAnimation.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/ScreenOrientation.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ScreenOrientation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/ScreenOrientation.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/ScreenOrientation.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/Sensitivity.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/Sensitivity.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/Sensitivity.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/Sensitivity.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/StartedStatus.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/StartedStatus.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/StartedStatus.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/StartedStatus.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/TranslationContainer.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/TranslationContainer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/TranslationContainer.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/TranslationContainer.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/TransportMethod.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/TransportMethod.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/TransportMethod.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/TransportMethod.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/UltrasonicSensorUnit.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/UltrasonicSensorUnit.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/UltrasonicSensorUnit.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/UltrasonicSensorUnit.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/VerticalAlignment.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/VerticalAlignment.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/VerticalAlignment.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/VerticalAlignment.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/YaVersion.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/YaVersion.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/YaVersion.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/YaVersion.java diff --git a/appinventor/components/src/com/google/appinventor/components/common/package-info.java b/appinventor/component-constants/src/main/java/com/google/appinventor/components/common/package-info.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/common/package-info.java rename to appinventor/component-constants/src/main/java/com/google/appinventor/components/common/package-info.java diff --git a/appinventor/components/build.gradle b/appinventor/components/build.gradle index 6860118e7bd..e12a00df028 100644 --- a/appinventor/components/build.gradle +++ b/appinventor/components/build.gradle @@ -39,7 +39,6 @@ sourceSets { dependencies { barcodeLibCompileOnly files('../lib/QRGenerator/core.jar') barcodeLibCompileOnly files('../lib/android/android-28/android.jar') - } defaultTasks 'CommonConstants', diff --git a/appinventor/settings.gradle.kts b/appinventor/settings.gradle.kts index 5a0085de8b3..e9b6a3a4d7e 100644 --- a/appinventor/settings.gradle.kts +++ b/appinventor/settings.gradle.kts @@ -1,3 +1,9 @@ rootProject.name = "appinventor" -include("blocklyeditor", "common-utils", "common-version", "components", "buildserver", "appengine") +include("appengine") +include("blocklyeditor") +include("common-utils") +include("common-version") +include("component-constants") +include("components") +include("buildserver") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") From a3618b5ff0681b48bd3a90db873b9ed268f87ef0 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 03:03:21 +0530 Subject: [PATCH 12/35] fix: set file encoding to utf8 --- appinventor/component-constants/build.gradle.kts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/appinventor/component-constants/build.gradle.kts b/appinventor/component-constants/build.gradle.kts index f3defb1aeaf..33517093582 100644 --- a/appinventor/component-constants/build.gradle.kts +++ b/appinventor/component-constants/build.gradle.kts @@ -7,4 +7,9 @@ repositories { } dependencies { +} + +tasks.withType(JavaCompile::class).forEach { + // add utf-8 encoding to all source files + it.options.encoding = "UTF-8" } \ No newline at end of file From cccfa1af69cb974df6223bff0002e070d28d5330 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 03:03:35 +0530 Subject: [PATCH 13/35] fix: buildserver main class --- appinventor/buildserver/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appinventor/buildserver/build.gradle.kts b/appinventor/buildserver/build.gradle.kts index d717416f347..c63b32ff037 100644 --- a/appinventor/buildserver/build.gradle.kts +++ b/appinventor/buildserver/build.gradle.kts @@ -3,7 +3,7 @@ plugins { } application { - mainClass.set("com.google.appinventor.buildserver.BuildServer.java") + mainClass.set("com.google.appinventor.buildserver.BuildServer") } sourceSets { From f65aa21a82537d89715ac14e514d72a69a238994 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 03:04:08 +0530 Subject: [PATCH 14/35] fix: GitBuildId class generation --- appinventor/common-version/build.gradle.kts | 25 ++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/appinventor/common-version/build.gradle.kts b/appinventor/common-version/build.gradle.kts index f8c64f6822e..eb6b0c3552f 100644 --- a/appinventor/common-version/build.gradle.kts +++ b/appinventor/common-version/build.gradle.kts @@ -12,26 +12,27 @@ gwt { val taskGitBuildId by tasks.creating(Copy::class) { from("GitBuildId.template") - into("$buildDir/generated/") + into("$buildDir/generated/sources/java") + rename("GitBuildId.template", "GitBuildId.java") + + filteringCharset = "UTF-8" filter( ReplaceTokens::class, mapOf( - "git.build.version" to execute("git describe --dirty"), - "git.build.fingerprint" to execute("git rev-parse HEAD"), - "ant.build.date" to getDate(), - "acra.uri" to "" + "tokens" to mapOf( + "git.build.version" to execute("git describe --dirty"), + "git.build.fingerprint" to execute("git rev-parse HEAD"), + "ant.build.date" to getDate(), + "acra.uri" to "" + ) ) ) - - filteringCharset = "UTF-8" - - rename("GitBuildId.template", "GitBuildId.java") } sourceSets { main { java { - setSrcDirs(listOf("src")) + setSrcDirs(listOf("src", "$buildDir/generated/sources/java")) } } @@ -42,6 +43,10 @@ sourceSets { } } +val compileJava by tasks.existing(JavaCompile::class) { + dependsOn(taskGitBuildId) +} + repositories { mavenCentral() } From 966ef490a388ab60cb04b83532f4357f4ecc8fcc Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 03:36:44 +0530 Subject: [PATCH 15/35] common-version: add gwt plugin --- .../src/com/google/appinventor/common/CommonVersion.gwt.xml | 4 ++-- appinventor/component-constants/build.gradle.kts | 5 +++++ .../google/appinventor/components/CommonConstants.gwt.xml | 5 +++++ .../google/appinventor/components/CommonConstants.gwt.xml | 5 ----- 4 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 appinventor/component-constants/src/main/java/com/google/appinventor/components/CommonConstants.gwt.xml delete mode 100644 appinventor/components/src/com/google/appinventor/components/CommonConstants.gwt.xml diff --git a/appinventor/common-version/src/com/google/appinventor/common/CommonVersion.gwt.xml b/appinventor/common-version/src/com/google/appinventor/common/CommonVersion.gwt.xml index b3983590a9d..d8d066b0ec7 100644 --- a/appinventor/common-version/src/com/google/appinventor/common/CommonVersion.gwt.xml +++ b/appinventor/common-version/src/com/google/appinventor/common/CommonVersion.gwt.xml @@ -1,4 +1,4 @@ - - + + diff --git a/appinventor/component-constants/build.gradle.kts b/appinventor/component-constants/build.gradle.kts index 33517093582..80d181080b1 100644 --- a/appinventor/component-constants/build.gradle.kts +++ b/appinventor/component-constants/build.gradle.kts @@ -1,5 +1,10 @@ plugins { `java-library` + id("org.docstr.gwt") version "1.1.21" +} + +gwt { + gwtVersion = "2.8.1" } repositories { diff --git a/appinventor/component-constants/src/main/java/com/google/appinventor/components/CommonConstants.gwt.xml b/appinventor/component-constants/src/main/java/com/google/appinventor/components/CommonConstants.gwt.xml new file mode 100644 index 00000000000..bc12d6103b9 --- /dev/null +++ b/appinventor/component-constants/src/main/java/com/google/appinventor/components/CommonConstants.gwt.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/appinventor/components/src/com/google/appinventor/components/CommonConstants.gwt.xml b/appinventor/components/src/com/google/appinventor/components/CommonConstants.gwt.xml deleted file mode 100644 index 2d2d73387c3..00000000000 --- a/appinventor/components/src/com/google/appinventor/components/CommonConstants.gwt.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - From ac15225075bcb7a0a05ddb9aaa50c9ef3bce630d Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 03:37:01 +0530 Subject: [PATCH 16/35] add barcode library module --- appinventor/barcode/build.gradle.kts | 34 +++++++++++++++++++ appinventor/barcode/consumer-rules.pro | 0 appinventor/barcode/proguard-rules.pro | 21 ++++++++++++ .../android/ExampleInstrumentedTest.java | 25 ++++++++++++++ .../barcode/src/main/AndroidManifest.xml | 5 +++ .../client/android/AppInvCaptureActivity.java | 0 .../zxing/client/android/BeepManager.java | 0 .../zxing/client/android/BuildConfig.java | 0 .../android/CaptureActivityHandler.java | 0 .../zxing/client/android/Constants.java | 0 .../google/zxing/client/android/Contents.java | 0 .../client/android/DecodeFormatManager.java | 0 .../zxing/client/android/DecodeHandler.java | 0 .../zxing/client/android/DecodeThread.java | 0 .../zxing/client/android/FinishListener.java | 0 .../zxing/client/android/HttpHelper.java | 0 .../zxing/client/android/InactivityTimer.java | 0 .../zxing/client/android/IntentSource.java | 0 .../google/zxing/client/android/Intents.java | 0 .../zxing/client/android/LocaleManager.java | 0 .../ViewfinderResultPointCallback.java | 0 .../zxing/client/android/ViewfinderView.java | 0 .../android/camera/AutoFocusManager.java | 0 .../camera/CameraConfigurationManager.java | 0 .../client/android/camera/CameraManager.java | 0 .../android/camera/HoneycombMR2Util.java | 0 .../android/camera/PreviewCallback.java | 0 .../zxing/client/android/camera/SdkLevel.java | 0 .../exposure/DefaultExposureInterface.java | 0 .../camera/exposure/ExposureInterface.java | 0 .../camera/exposure/ExposureManager.java | 0 .../exposure/FroyoExposureInterface.java | 0 .../open/DefaultOpenCameraInterface.java | 0 .../open/GingerbreadOpenCameraInterface.java | 0 .../camera/open/OpenCameraInterface.java | 0 .../camera/open/OpenCameraManager.java | 0 .../common/PlatformSupportManager.java | 0 .../executor/AsyncTaskExecInterface.java | 0 .../common/executor/AsyncTaskExecManager.java | 0 .../DefaultAsyncTaskExecInterface.java | 0 .../HoneycombAsyncTaskExecInterface.java | 0 .../android/result/ResultButtonListener.java | 0 .../client/android/result/ResultHandler.java | 2 +- .../android/result/ResultHandlerFactory.java | 0 .../android/result/TextResultHandler.java | 0 .../zxing/client/android/ExampleUnitTest.java | 17 ++++++++++ appinventor/build.gradle.kts | 4 +++ appinventor/components/build.gradle | 18 ---------- appinventor/settings.gradle.kts | 9 +++++ 49 files changed, 116 insertions(+), 19 deletions(-) create mode 100644 appinventor/barcode/build.gradle.kts create mode 100644 appinventor/barcode/consumer-rules.pro create mode 100644 appinventor/barcode/proguard-rules.pro create mode 100644 appinventor/barcode/src/androidTest/java/com/google/zxing/client/android/ExampleInstrumentedTest.java create mode 100644 appinventor/barcode/src/main/AndroidManifest.xml rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/AppInvCaptureActivity.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/BeepManager.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/BuildConfig.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/CaptureActivityHandler.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/Constants.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/Contents.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/DecodeFormatManager.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/DecodeHandler.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/DecodeThread.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/FinishListener.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/HttpHelper.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/InactivityTimer.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/IntentSource.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/Intents.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/LocaleManager.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/ViewfinderResultPointCallback.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/ViewfinderView.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/AutoFocusManager.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/CameraConfigurationManager.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/CameraManager.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/HoneycombMR2Util.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/PreviewCallback.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/SdkLevel.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/exposure/DefaultExposureInterface.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/exposure/ExposureInterface.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/exposure/ExposureManager.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/exposure/FroyoExposureInterface.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/open/DefaultOpenCameraInterface.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/open/GingerbreadOpenCameraInterface.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/open/OpenCameraInterface.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/camera/open/OpenCameraManager.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/common/PlatformSupportManager.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/common/executor/AsyncTaskExecInterface.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/common/executor/AsyncTaskExecManager.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/common/executor/DefaultAsyncTaskExecInterface.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/common/executor/HoneycombAsyncTaskExecInterface.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/result/ResultButtonListener.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/result/ResultHandler.java (99%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/result/ResultHandlerFactory.java (100%) rename appinventor/{components/src => barcode/src/main/java}/com/google/zxing/client/android/result/TextResultHandler.java (100%) create mode 100644 appinventor/barcode/src/test/java/com/google/zxing/client/android/ExampleUnitTest.java diff --git a/appinventor/barcode/build.gradle.kts b/appinventor/barcode/build.gradle.kts new file mode 100644 index 00000000000..e3fea0dda0b --- /dev/null +++ b/appinventor/barcode/build.gradle.kts @@ -0,0 +1,34 @@ +plugins { + id("com.android.library") +} + +android { + compileSdk = 32 + + defaultConfig { + minSdk = 21 + targetSdk = 32 + + testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation(files("../lib/QRGenerator/core.jar")) + implementation("com.android.support:appcompat-v7:28.0.0") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("com.android.support.test:runner:1.0.2") + androidTestImplementation("com.android.support.test.espresso:espresso-core:3.0.2") +} \ No newline at end of file diff --git a/appinventor/barcode/consumer-rules.pro b/appinventor/barcode/consumer-rules.pro new file mode 100644 index 00000000000..e69de29bb2d diff --git a/appinventor/barcode/proguard-rules.pro b/appinventor/barcode/proguard-rules.pro new file mode 100644 index 00000000000..481bb434814 --- /dev/null +++ b/appinventor/barcode/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/appinventor/barcode/src/androidTest/java/com/google/zxing/client/android/ExampleInstrumentedTest.java b/appinventor/barcode/src/androidTest/java/com/google/zxing/client/android/ExampleInstrumentedTest.java new file mode 100644 index 00000000000..a8e456812d7 --- /dev/null +++ b/appinventor/barcode/src/androidTest/java/com/google/zxing/client/android/ExampleInstrumentedTest.java @@ -0,0 +1,25 @@ +package com.google.zxing.client.android; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.google.zxing.client.android.test", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/appinventor/barcode/src/main/AndroidManifest.xml b/appinventor/barcode/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..3a00b0a5e23 --- /dev/null +++ b/appinventor/barcode/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/appinventor/components/src/com/google/zxing/client/android/AppInvCaptureActivity.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/AppInvCaptureActivity.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/AppInvCaptureActivity.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/AppInvCaptureActivity.java diff --git a/appinventor/components/src/com/google/zxing/client/android/BeepManager.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/BeepManager.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/BeepManager.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/BeepManager.java diff --git a/appinventor/components/src/com/google/zxing/client/android/BuildConfig.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/BuildConfig.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/BuildConfig.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/BuildConfig.java diff --git a/appinventor/components/src/com/google/zxing/client/android/CaptureActivityHandler.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/CaptureActivityHandler.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/CaptureActivityHandler.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/CaptureActivityHandler.java diff --git a/appinventor/components/src/com/google/zxing/client/android/Constants.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/Constants.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/Constants.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/Constants.java diff --git a/appinventor/components/src/com/google/zxing/client/android/Contents.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/Contents.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/Contents.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/Contents.java diff --git a/appinventor/components/src/com/google/zxing/client/android/DecodeFormatManager.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/DecodeFormatManager.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/DecodeFormatManager.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/DecodeFormatManager.java diff --git a/appinventor/components/src/com/google/zxing/client/android/DecodeHandler.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/DecodeHandler.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/DecodeHandler.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/DecodeHandler.java diff --git a/appinventor/components/src/com/google/zxing/client/android/DecodeThread.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/DecodeThread.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/DecodeThread.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/DecodeThread.java diff --git a/appinventor/components/src/com/google/zxing/client/android/FinishListener.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/FinishListener.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/FinishListener.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/FinishListener.java diff --git a/appinventor/components/src/com/google/zxing/client/android/HttpHelper.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/HttpHelper.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/HttpHelper.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/HttpHelper.java diff --git a/appinventor/components/src/com/google/zxing/client/android/InactivityTimer.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/InactivityTimer.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/InactivityTimer.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/InactivityTimer.java diff --git a/appinventor/components/src/com/google/zxing/client/android/IntentSource.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/IntentSource.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/IntentSource.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/IntentSource.java diff --git a/appinventor/components/src/com/google/zxing/client/android/Intents.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/Intents.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/Intents.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/Intents.java diff --git a/appinventor/components/src/com/google/zxing/client/android/LocaleManager.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/LocaleManager.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/LocaleManager.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/LocaleManager.java diff --git a/appinventor/components/src/com/google/zxing/client/android/ViewfinderResultPointCallback.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/ViewfinderResultPointCallback.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/ViewfinderResultPointCallback.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/ViewfinderResultPointCallback.java diff --git a/appinventor/components/src/com/google/zxing/client/android/ViewfinderView.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/ViewfinderView.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/ViewfinderView.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/ViewfinderView.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/AutoFocusManager.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/AutoFocusManager.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/AutoFocusManager.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/AutoFocusManager.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/CameraConfigurationManager.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/CameraConfigurationManager.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/CameraConfigurationManager.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/CameraConfigurationManager.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/CameraManager.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/CameraManager.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/CameraManager.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/CameraManager.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/HoneycombMR2Util.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/HoneycombMR2Util.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/HoneycombMR2Util.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/HoneycombMR2Util.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/PreviewCallback.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/PreviewCallback.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/PreviewCallback.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/PreviewCallback.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/SdkLevel.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/SdkLevel.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/SdkLevel.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/SdkLevel.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/exposure/DefaultExposureInterface.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/exposure/DefaultExposureInterface.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/exposure/DefaultExposureInterface.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/exposure/DefaultExposureInterface.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/exposure/ExposureInterface.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/exposure/ExposureInterface.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/exposure/ExposureInterface.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/exposure/ExposureInterface.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/exposure/ExposureManager.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/exposure/ExposureManager.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/exposure/ExposureManager.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/exposure/ExposureManager.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/exposure/FroyoExposureInterface.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/exposure/FroyoExposureInterface.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/exposure/FroyoExposureInterface.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/exposure/FroyoExposureInterface.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/open/DefaultOpenCameraInterface.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/open/DefaultOpenCameraInterface.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/open/DefaultOpenCameraInterface.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/open/DefaultOpenCameraInterface.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/open/GingerbreadOpenCameraInterface.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/open/GingerbreadOpenCameraInterface.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/open/GingerbreadOpenCameraInterface.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/open/GingerbreadOpenCameraInterface.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/open/OpenCameraInterface.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/open/OpenCameraInterface.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/open/OpenCameraInterface.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/open/OpenCameraInterface.java diff --git a/appinventor/components/src/com/google/zxing/client/android/camera/open/OpenCameraManager.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/open/OpenCameraManager.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/camera/open/OpenCameraManager.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/camera/open/OpenCameraManager.java diff --git a/appinventor/components/src/com/google/zxing/client/android/common/PlatformSupportManager.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/common/PlatformSupportManager.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/common/PlatformSupportManager.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/common/PlatformSupportManager.java diff --git a/appinventor/components/src/com/google/zxing/client/android/common/executor/AsyncTaskExecInterface.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/common/executor/AsyncTaskExecInterface.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/common/executor/AsyncTaskExecInterface.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/common/executor/AsyncTaskExecInterface.java diff --git a/appinventor/components/src/com/google/zxing/client/android/common/executor/AsyncTaskExecManager.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/common/executor/AsyncTaskExecManager.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/common/executor/AsyncTaskExecManager.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/common/executor/AsyncTaskExecManager.java diff --git a/appinventor/components/src/com/google/zxing/client/android/common/executor/DefaultAsyncTaskExecInterface.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/common/executor/DefaultAsyncTaskExecInterface.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/common/executor/DefaultAsyncTaskExecInterface.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/common/executor/DefaultAsyncTaskExecInterface.java diff --git a/appinventor/components/src/com/google/zxing/client/android/common/executor/HoneycombAsyncTaskExecInterface.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/common/executor/HoneycombAsyncTaskExecInterface.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/common/executor/HoneycombAsyncTaskExecInterface.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/common/executor/HoneycombAsyncTaskExecInterface.java diff --git a/appinventor/components/src/com/google/zxing/client/android/result/ResultButtonListener.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/result/ResultButtonListener.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/result/ResultButtonListener.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/result/ResultButtonListener.java diff --git a/appinventor/components/src/com/google/zxing/client/android/result/ResultHandler.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/result/ResultHandler.java similarity index 99% rename from appinventor/components/src/com/google/zxing/client/android/result/ResultHandler.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/result/ResultHandler.java index 9c431c81a29..ec1bd1fb1c9 100644 --- a/appinventor/components/src/com/google/zxing/client/android/result/ResultHandler.java +++ b/appinventor/barcode/src/main/java/com/google/zxing/client/android/result/ResultHandler.java @@ -64,7 +64,7 @@ public abstract class ResultHandler { "&referrer=utm_source%3Dbarcodescanner%26utm_medium%3Dapps%26utm_campaign%3Dscan"; private static final String[] EMAIL_TYPE_STRINGS = {"home", "work", "mobile"}; - private static final String[] PHONE_TYPE_STRINGS = {"home", "work", "mobile", "fax", "pager", "main"}; + private static final String[] PHONE_TYPE_STRINGS = {"home", "work", "mobile", "fax", "pager", ""}; private static final String[] ADDRESS_TYPE_STRINGS = {"home", "work"}; private static final int[] EMAIL_TYPE_VALUES = { ContactsContract.CommonDataKinds.Email.TYPE_HOME, diff --git a/appinventor/components/src/com/google/zxing/client/android/result/ResultHandlerFactory.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/result/ResultHandlerFactory.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/result/ResultHandlerFactory.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/result/ResultHandlerFactory.java diff --git a/appinventor/components/src/com/google/zxing/client/android/result/TextResultHandler.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/result/TextResultHandler.java similarity index 100% rename from appinventor/components/src/com/google/zxing/client/android/result/TextResultHandler.java rename to appinventor/barcode/src/main/java/com/google/zxing/client/android/result/TextResultHandler.java diff --git a/appinventor/barcode/src/test/java/com/google/zxing/client/android/ExampleUnitTest.java b/appinventor/barcode/src/test/java/com/google/zxing/client/android/ExampleUnitTest.java new file mode 100644 index 00000000000..12757cfb862 --- /dev/null +++ b/appinventor/barcode/src/test/java/com/google/zxing/client/android/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.google.zxing.client.android; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/appinventor/build.gradle.kts b/appinventor/build.gradle.kts index d783405ecb2..b30d0c3fd30 100644 --- a/appinventor/build.gradle.kts +++ b/appinventor/build.gradle.kts @@ -1,5 +1,9 @@ description = "Definitions common to multiple App Inventor build.xml files." +plugins { + id("com.android.library") version "7.1.1" apply false +} + //tasks.register("clean") { // delete("build") // delete("reports") diff --git a/appinventor/components/build.gradle b/appinventor/components/build.gradle index e12a00df028..f5225d62030 100644 --- a/appinventor/components/build.gradle +++ b/appinventor/components/build.gradle @@ -15,30 +15,12 @@ sourceSets { include 'com/google/appinventor/components/annotations/**/*.java' } } - commonConstants { - java { - srcDirs = ['src'] - include 'com/google/appinventor/components/common/*.java' - exclude 'com/google/appinventor/components/common/HtmlEntities.java' - } - } htmlEntities { java { srcDirs = ['src'] include 'com/google/appinventor/components/common/HtmlEntities.java' } } - barcodeLib { - java { - srcDirs = ['src'] - include 'com/google/zxing/client/android/**/*.java' - } - } -} - -dependencies { - barcodeLibCompileOnly files('../lib/QRGenerator/core.jar') - barcodeLibCompileOnly files('../lib/android/android-28/android.jar') } defaultTasks 'CommonConstants', diff --git a/appinventor/settings.gradle.kts b/appinventor/settings.gradle.kts index e9b6a3a4d7e..51eec2b9ccb 100644 --- a/appinventor/settings.gradle.kts +++ b/appinventor/settings.gradle.kts @@ -6,4 +6,13 @@ include("common-version") include("component-constants") include("components") include("buildserver") +include("barcode") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") + +pluginManagement { + repositories { + gradlePluginPortal() + google() + mavenCentral() + } +} From 72ce31b124583c7ff0dfcb8f376d712d299d0164 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 11:41:07 +0530 Subject: [PATCH 17/35] move repo resolution in settings.gradle.kts --- appinventor/buildserver/build.gradle.kts | 4 ---- appinventor/common-utils/build.gradle.kts | 4 ---- appinventor/common-version/build.gradle.kts | 4 ---- appinventor/component-constants/build.gradle.kts | 4 ---- appinventor/settings.gradle.kts | 8 ++++++++ 5 files changed, 8 insertions(+), 16 deletions(-) diff --git a/appinventor/buildserver/build.gradle.kts b/appinventor/buildserver/build.gradle.kts index c63b32ff037..fed6e196f5c 100644 --- a/appinventor/buildserver/build.gradle.kts +++ b/appinventor/buildserver/build.gradle.kts @@ -20,10 +20,6 @@ sourceSets { } } -repositories { - mavenCentral() -} - dependencies { implementation(projects.commonUtils) implementation(projects.commonVersion) diff --git a/appinventor/common-utils/build.gradle.kts b/appinventor/common-utils/build.gradle.kts index ca3f99e7af1..6b2a16629ec 100644 --- a/appinventor/common-utils/build.gradle.kts +++ b/appinventor/common-utils/build.gradle.kts @@ -20,10 +20,6 @@ sourceSets { } } -repositories { - mavenCentral() -} - dependencies { implementation("com.google.guava:guava:14.0.1") } \ No newline at end of file diff --git a/appinventor/common-version/build.gradle.kts b/appinventor/common-version/build.gradle.kts index eb6b0c3552f..5002197785d 100644 --- a/appinventor/common-version/build.gradle.kts +++ b/appinventor/common-version/build.gradle.kts @@ -47,10 +47,6 @@ val compileJava by tasks.existing(JavaCompile::class) { dependsOn(taskGitBuildId) } -repositories { - mavenCentral() -} - dependencies { implementation("com.google.guava:guava:14.0.1") } diff --git a/appinventor/component-constants/build.gradle.kts b/appinventor/component-constants/build.gradle.kts index 80d181080b1..c39550650c8 100644 --- a/appinventor/component-constants/build.gradle.kts +++ b/appinventor/component-constants/build.gradle.kts @@ -7,10 +7,6 @@ gwt { gwtVersion = "2.8.1" } -repositories { - mavenCentral() -} - dependencies { } diff --git a/appinventor/settings.gradle.kts b/appinventor/settings.gradle.kts index 51eec2b9ccb..9eceab89023 100644 --- a/appinventor/settings.gradle.kts +++ b/appinventor/settings.gradle.kts @@ -16,3 +16,11 @@ pluginManagement { mavenCentral() } } + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} \ No newline at end of file From 8689665f037a64b485d7ac052032256424ad0a59 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 12:53:53 +0530 Subject: [PATCH 18/35] fix barcode module --- appinventor/barcode/build.gradle.kts | 14 +++++--------- appinventor/build.gradle.kts | 7 +------ appinventor/gradle.properties | 1 + 3 files changed, 7 insertions(+), 15 deletions(-) create mode 100644 appinventor/gradle.properties diff --git a/appinventor/barcode/build.gradle.kts b/appinventor/barcode/build.gradle.kts index e3fea0dda0b..50468402167 100644 --- a/appinventor/barcode/build.gradle.kts +++ b/appinventor/barcode/build.gradle.kts @@ -3,11 +3,11 @@ plugins { } android { - compileSdk = 32 + compileSdk = 30 defaultConfig { minSdk = 21 - targetSdk = 32 + targetSdk = 30 testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") @@ -20,15 +20,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } } dependencies { implementation(files("../lib/QRGenerator/core.jar")) - implementation("com.android.support:appcompat-v7:28.0.0") - testImplementation("junit:junit:4.13.2") - androidTestImplementation("com.android.support.test:runner:1.0.2") - androidTestImplementation("com.android.support.test.espresso:espresso-core:3.0.2") -} \ No newline at end of file +} diff --git a/appinventor/build.gradle.kts b/appinventor/build.gradle.kts index b30d0c3fd30..ede50d52b31 100644 --- a/appinventor/build.gradle.kts +++ b/appinventor/build.gradle.kts @@ -1,10 +1,5 @@ description = "Definitions common to multiple App Inventor build.xml files." plugins { - id("com.android.library") version "7.1.1" apply false + id("com.android.library") version "7.2.2" apply false } - -//tasks.register("clean") { -// delete("build") -// delete("reports") -//} diff --git a/appinventor/gradle.properties b/appinventor/gradle.properties new file mode 100644 index 00000000000..b39e7e7a991 --- /dev/null +++ b/appinventor/gradle.properties @@ -0,0 +1 @@ +org.gradle.java.home=C:/Users/Pavitra/.jdks/temurin-11.0.16 \ No newline at end of file From 52529ca746e99b32b6ba1448a8087f9fc5cfa97e Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 12:54:30 +0530 Subject: [PATCH 19/35] convert components -> kts --- appinventor/components/build.gradle | 33 ------------------- appinventor/components/build.gradle.kts | 43 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 33 deletions(-) delete mode 100644 appinventor/components/build.gradle create mode 100644 appinventor/components/build.gradle.kts diff --git a/appinventor/components/build.gradle b/appinventor/components/build.gradle deleted file mode 100644 index f5225d62030..00000000000 --- a/appinventor/components/build.gradle +++ /dev/null @@ -1,33 +0,0 @@ -plugins { - id 'java' -} - -sourceSets { - runtime { - java { - srcDirs = ['src'] - include 'com/google/appinventor/components/runtime/**/*.java' - } - } - annotations { - java { - srcDirs = ['src'] - include 'com/google/appinventor/components/annotations/**/*.java' - } - } - htmlEntities { - java { - srcDirs = ['src'] - include 'com/google/appinventor/components/common/HtmlEntities.java' - } - } -} - -defaultTasks 'CommonConstants', - 'AndroidRuntime', - 'JsonComponentDescription', - 'XmlComponentDescription', - 'ComponentList', - 'ComponentTranslation', - 'Barcode' - diff --git a/appinventor/components/build.gradle.kts b/appinventor/components/build.gradle.kts new file mode 100644 index 00000000000..cccb0eb1bdb --- /dev/null +++ b/appinventor/components/build.gradle.kts @@ -0,0 +1,43 @@ +plugins { + id("com.android.library") +} + +android { + compileSdk = 30 + + defaultConfig { + minSdk = 21 + targetSdk = 30 + + testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + sourceSets { + named("main") { + java { + setSrcDirs(listOf("src")) + } + } + named("test") { + java { + setSrcDirs(listOf("tests")) + } + } + } +} + +dependencies { + implementation(projects.componentConstants) + implementation(projects.barcode) +} From 49fb2fa5c6f144fe436d9a5910fb135f347a2afc Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 12:56:42 +0530 Subject: [PATCH 20/35] remove unused test files from :barcode --- .../android/ExampleInstrumentedTest.java | 25 ------------------- .../zxing/client/android/ExampleUnitTest.java | 17 ------------- 2 files changed, 42 deletions(-) delete mode 100644 appinventor/barcode/src/androidTest/java/com/google/zxing/client/android/ExampleInstrumentedTest.java delete mode 100644 appinventor/barcode/src/test/java/com/google/zxing/client/android/ExampleUnitTest.java diff --git a/appinventor/barcode/src/androidTest/java/com/google/zxing/client/android/ExampleInstrumentedTest.java b/appinventor/barcode/src/androidTest/java/com/google/zxing/client/android/ExampleInstrumentedTest.java deleted file mode 100644 index a8e456812d7..00000000000 --- a/appinventor/barcode/src/androidTest/java/com/google/zxing/client/android/ExampleInstrumentedTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.google.zxing.client.android; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.google.zxing.client.android.test", appContext.getPackageName()); - } -} \ No newline at end of file diff --git a/appinventor/barcode/src/test/java/com/google/zxing/client/android/ExampleUnitTest.java b/appinventor/barcode/src/test/java/com/google/zxing/client/android/ExampleUnitTest.java deleted file mode 100644 index 12757cfb862..00000000000 --- a/appinventor/barcode/src/test/java/com/google/zxing/client/android/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.google.zxing.client.android; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file From 9cf1217c8f84ebd42ea3bb963d9efd32474dfbd2 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 13:13:02 +0530 Subject: [PATCH 21/35] split components module --- appinventor/component-annotations/build.gradle.kts | 3 +++ .../google/appinventor/components/annotations/Asset.java | 0 .../components/annotations/DesignerComponent.java | 0 .../components/annotations/DesignerProperty.java | 0 .../appinventor/components/annotations/IsColor.java | 0 .../appinventor/components/annotations/Options.java | 0 .../components/annotations/PropertyCategory.java | 0 .../components/annotations/SimpleBroadcastReceiver.java | 0 .../appinventor/components/annotations/SimpleEvent.java | 0 .../components/annotations/SimpleFunction.java | 0 .../appinventor/components/annotations/SimpleObject.java | 0 .../components/annotations/SimpleProperty.java | 0 .../components/annotations/SimplePropertyCopier.java | 0 .../components/annotations/UsesActivities.java | 0 .../components/annotations/UsesActivityMetadata.java | 0 .../components/annotations/UsesApplicationMetadata.java | 0 .../appinventor/components/annotations/UsesAssets.java | 0 .../components/annotations/UsesBroadcastReceivers.java | 0 .../components/annotations/UsesContentProviders.java | 0 .../components/annotations/UsesLibraries.java | 0 .../components/annotations/UsesNativeLibraries.java | 0 .../components/annotations/UsesPermissions.java | 0 .../appinventor/components/annotations/UsesQueries.java | 0 .../appinventor/components/annotations/UsesServices.java | 0 .../annotations/androidmanifest/ActionElement.java | 0 .../annotations/androidmanifest/ActivityElement.java | 0 .../annotations/androidmanifest/CategoryElement.java | 0 .../annotations/androidmanifest/DataElement.java | 0 .../androidmanifest/GrantUriPermissionElement.java | 0 .../annotations/androidmanifest/IntentFilterElement.java | 0 .../annotations/androidmanifest/MetaDataElement.java | 0 .../androidmanifest/PathPermissionElement.java | 0 .../annotations/androidmanifest/ProviderElement.java | 0 .../annotations/androidmanifest/ReceiverElement.java | 0 .../annotations/androidmanifest/ServiceElement.java | 0 .../annotations/androidmanifest/package-info.java | 0 .../appinventor/components/annotations/package-info.java | 0 appinventor/component-scripts/build.gradle.kts | 9 +++++++++ .../components/scripts/ComponentDescriptorGenerator.java | 0 .../components/scripts/ComponentListGenerator.java | 0 .../components/scripts/ComponentProcessor.java | 0 .../scripts/ComponentTranslationGenerator.java | 0 .../components/scripts/DocumentationGenerator.java | 0 .../components/scripts/ExternalComponentGenerator.java | 0 .../scripts/MarkdownDocumentationGenerator.java | 0 .../appinventor/components/scripts/package-info.java | 0 .../scripts/templates/COMPONENT_HEADER_END.txt | 0 .../scripts/templates/COMPONENT_HEADER_PER_EVENT.txt | 0 .../scripts/templates/COMPONENT_HEADER_PER_METHOD.txt | 0 .../scripts/templates/COMPONENT_HEADER_PER_PROPERTY.txt | 0 .../scripts/templates/COMPONENT_HEADER_START.txt | 0 .../components/scripts/templates/EVENTS_HEADER.txt | 0 .../components/scripts/templates/EVENT_FOOTER.txt | 0 .../components/scripts/templates/EVENT_HEADER_END.txt | 0 .../scripts/templates/EVENT_HEADER_PER_PARAMETER.txt | 0 .../components/scripts/templates/EVENT_HEADER_START.txt | 0 .../components/scripts/templates/EVENT_PER_PARAMETER.txt | 0 .../components/scripts/templates/METHODS_HEADER.txt | 0 .../components/scripts/templates/METHOD_FOOTER.txt | 0 .../components/scripts/templates/METHOD_HEADER_END.txt | 0 .../scripts/templates/METHOD_HEADER_PER_PARAMETER.txt | 0 .../scripts/templates/METHOD_HEADER_RETURN_TYPE.txt | 0 .../components/scripts/templates/METHOD_HEADER_START.txt | 0 .../scripts/templates/METHOD_PER_PARAMETER1.txt | 0 .../scripts/templates/METHOD_PER_PARAMETER2.txt | 0 .../components/scripts/templates/METHOD_RETURN_TYPE.txt | 0 .../components/scripts/templates/OUTPUT_FOOTER.txt | 0 .../components/scripts/templates/OUTPUT_HEADER.txt | 0 appinventor/settings.gradle.kts | 2 ++ 69 files changed, 14 insertions(+) create mode 100644 appinventor/component-annotations/build.gradle.kts rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/Asset.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/DesignerComponent.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/DesignerProperty.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/IsColor.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/Options.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/PropertyCategory.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/SimpleBroadcastReceiver.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/SimpleEvent.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/SimpleFunction.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/SimpleObject.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/SimpleProperty.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/SimplePropertyCopier.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesActivities.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesActivityMetadata.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesApplicationMetadata.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesAssets.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesBroadcastReceivers.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesContentProviders.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesLibraries.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesNativeLibraries.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesPermissions.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesQueries.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/UsesServices.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/ActionElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/ActivityElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/CategoryElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/DataElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/GrantUriPermissionElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/IntentFilterElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/MetaDataElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/PathPermissionElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/ProviderElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/ReceiverElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/ServiceElement.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/androidmanifest/package-info.java (100%) rename appinventor/{components/src => component-annotations/src/main/java}/com/google/appinventor/components/annotations/package-info.java (100%) create mode 100644 appinventor/component-scripts/build.gradle.kts rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/ComponentDescriptorGenerator.java (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/ComponentListGenerator.java (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/ComponentProcessor.java (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/ComponentTranslationGenerator.java (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/DocumentationGenerator.java (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/ExternalComponentGenerator.java (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/MarkdownDocumentationGenerator.java (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/package-info.java (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_END.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_EVENT.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_METHOD.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_PROPERTY.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_START.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/EVENTS_HEADER.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/EVENT_FOOTER.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/EVENT_HEADER_END.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/EVENT_HEADER_PER_PARAMETER.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/EVENT_HEADER_START.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/EVENT_PER_PARAMETER.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/METHODS_HEADER.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/METHOD_FOOTER.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/METHOD_HEADER_END.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/METHOD_HEADER_PER_PARAMETER.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/METHOD_HEADER_RETURN_TYPE.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/METHOD_HEADER_START.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/METHOD_PER_PARAMETER1.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/METHOD_PER_PARAMETER2.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/METHOD_RETURN_TYPE.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/OUTPUT_FOOTER.txt (100%) rename appinventor/{components/src => component-scripts/src/main/java}/com/google/appinventor/components/scripts/templates/OUTPUT_HEADER.txt (100%) diff --git a/appinventor/component-annotations/build.gradle.kts b/appinventor/component-annotations/build.gradle.kts new file mode 100644 index 00000000000..f6727627a17 --- /dev/null +++ b/appinventor/component-annotations/build.gradle.kts @@ -0,0 +1,3 @@ +plugins { + `java-library` +} diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/Asset.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/Asset.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/Asset.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/Asset.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/DesignerComponent.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/DesignerComponent.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/DesignerComponent.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/DesignerComponent.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/DesignerProperty.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/DesignerProperty.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/DesignerProperty.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/DesignerProperty.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/IsColor.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/IsColor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/IsColor.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/IsColor.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/Options.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/Options.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/Options.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/Options.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/PropertyCategory.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/PropertyCategory.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/PropertyCategory.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/PropertyCategory.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/SimpleBroadcastReceiver.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimpleBroadcastReceiver.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/SimpleBroadcastReceiver.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimpleBroadcastReceiver.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/SimpleEvent.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimpleEvent.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/SimpleEvent.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimpleEvent.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/SimpleFunction.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimpleFunction.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/SimpleFunction.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimpleFunction.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/SimpleObject.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimpleObject.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/SimpleObject.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimpleObject.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/SimpleProperty.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimpleProperty.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/SimpleProperty.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimpleProperty.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/SimplePropertyCopier.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimplePropertyCopier.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/SimplePropertyCopier.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/SimplePropertyCopier.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesActivities.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesActivities.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesActivities.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesActivities.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesActivityMetadata.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesActivityMetadata.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesActivityMetadata.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesActivityMetadata.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesApplicationMetadata.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesApplicationMetadata.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesApplicationMetadata.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesApplicationMetadata.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesAssets.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesAssets.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesAssets.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesAssets.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesBroadcastReceivers.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesBroadcastReceivers.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesBroadcastReceivers.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesBroadcastReceivers.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesContentProviders.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesContentProviders.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesContentProviders.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesContentProviders.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesLibraries.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesLibraries.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesLibraries.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesLibraries.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesNativeLibraries.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesNativeLibraries.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesNativeLibraries.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesNativeLibraries.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesPermissions.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesPermissions.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesPermissions.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesPermissions.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesQueries.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesQueries.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesQueries.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesQueries.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/UsesServices.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesServices.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/UsesServices.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/UsesServices.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/ActionElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/ActionElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/ActionElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/ActionElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/ActivityElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/ActivityElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/ActivityElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/ActivityElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/CategoryElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/CategoryElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/CategoryElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/CategoryElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/DataElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/DataElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/DataElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/DataElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/GrantUriPermissionElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/GrantUriPermissionElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/GrantUriPermissionElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/GrantUriPermissionElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/IntentFilterElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/IntentFilterElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/IntentFilterElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/IntentFilterElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/MetaDataElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/MetaDataElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/MetaDataElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/MetaDataElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/PathPermissionElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/PathPermissionElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/PathPermissionElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/PathPermissionElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/ProviderElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/ProviderElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/ProviderElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/ProviderElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/ReceiverElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/ReceiverElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/ReceiverElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/ReceiverElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/ServiceElement.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/ServiceElement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/ServiceElement.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/ServiceElement.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/package-info.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/package-info.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/androidmanifest/package-info.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/androidmanifest/package-info.java diff --git a/appinventor/components/src/com/google/appinventor/components/annotations/package-info.java b/appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/package-info.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/annotations/package-info.java rename to appinventor/component-annotations/src/main/java/com/google/appinventor/components/annotations/package-info.java diff --git a/appinventor/component-scripts/build.gradle.kts b/appinventor/component-scripts/build.gradle.kts new file mode 100644 index 00000000000..21db87310e0 --- /dev/null +++ b/appinventor/component-scripts/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + java +} + +dependencies { + implementation(projects.commonUtils) + implementation(projects.componentConstants) + implementation(projects.componentAnnotations) +} \ No newline at end of file diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/ComponentDescriptorGenerator.java b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentDescriptorGenerator.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/ComponentDescriptorGenerator.java rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentDescriptorGenerator.java diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/ComponentListGenerator.java b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentListGenerator.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/ComponentListGenerator.java rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentListGenerator.java diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/ComponentProcessor.java b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentProcessor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/ComponentProcessor.java rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentProcessor.java diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/ComponentTranslationGenerator.java b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentTranslationGenerator.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/ComponentTranslationGenerator.java rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentTranslationGenerator.java diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/DocumentationGenerator.java b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/DocumentationGenerator.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/DocumentationGenerator.java rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/DocumentationGenerator.java diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/ExternalComponentGenerator.java b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ExternalComponentGenerator.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/ExternalComponentGenerator.java rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ExternalComponentGenerator.java diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/MarkdownDocumentationGenerator.java b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/MarkdownDocumentationGenerator.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/MarkdownDocumentationGenerator.java rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/MarkdownDocumentationGenerator.java diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/package-info.java b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/package-info.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/package-info.java rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/package-info.java diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_END.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_END.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_END.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_END.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_EVENT.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_EVENT.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_EVENT.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_EVENT.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_METHOD.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_METHOD.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_METHOD.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_METHOD.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_PROPERTY.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_PROPERTY.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_PROPERTY.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_PER_PROPERTY.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_START.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_START.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_START.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/COMPONENT_HEADER_START.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENTS_HEADER.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENTS_HEADER.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENTS_HEADER.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENTS_HEADER.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENT_FOOTER.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENT_FOOTER.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENT_FOOTER.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENT_FOOTER.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENT_HEADER_END.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENT_HEADER_END.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENT_HEADER_END.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENT_HEADER_END.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENT_HEADER_PER_PARAMETER.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENT_HEADER_PER_PARAMETER.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENT_HEADER_PER_PARAMETER.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENT_HEADER_PER_PARAMETER.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENT_HEADER_START.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENT_HEADER_START.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENT_HEADER_START.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENT_HEADER_START.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENT_PER_PARAMETER.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENT_PER_PARAMETER.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/EVENT_PER_PARAMETER.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/EVENT_PER_PARAMETER.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/METHODS_HEADER.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHODS_HEADER.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/METHODS_HEADER.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHODS_HEADER.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_FOOTER.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_FOOTER.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_FOOTER.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_FOOTER.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_HEADER_END.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_HEADER_END.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_HEADER_END.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_HEADER_END.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_HEADER_PER_PARAMETER.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_HEADER_PER_PARAMETER.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_HEADER_PER_PARAMETER.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_HEADER_PER_PARAMETER.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_HEADER_RETURN_TYPE.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_HEADER_RETURN_TYPE.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_HEADER_RETURN_TYPE.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_HEADER_RETURN_TYPE.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_HEADER_START.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_HEADER_START.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_HEADER_START.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_HEADER_START.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_PER_PARAMETER1.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_PER_PARAMETER1.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_PER_PARAMETER1.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_PER_PARAMETER1.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_PER_PARAMETER2.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_PER_PARAMETER2.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_PER_PARAMETER2.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_PER_PARAMETER2.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_RETURN_TYPE.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_RETURN_TYPE.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/METHOD_RETURN_TYPE.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/METHOD_RETURN_TYPE.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/OUTPUT_FOOTER.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/OUTPUT_FOOTER.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/OUTPUT_FOOTER.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/OUTPUT_FOOTER.txt diff --git a/appinventor/components/src/com/google/appinventor/components/scripts/templates/OUTPUT_HEADER.txt b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/OUTPUT_HEADER.txt similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/scripts/templates/OUTPUT_HEADER.txt rename to appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/templates/OUTPUT_HEADER.txt diff --git a/appinventor/settings.gradle.kts b/appinventor/settings.gradle.kts index 9eceab89023..67d161c4af8 100644 --- a/appinventor/settings.gradle.kts +++ b/appinventor/settings.gradle.kts @@ -4,6 +4,8 @@ include("blocklyeditor") include("common-utils") include("common-version") include("component-constants") +include("component-scripts") +include("component-annotations") include("components") include("buildserver") include("barcode") From 051ac868d19fa4cb0cf68ee6eba8914362fe68d4 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 17:57:00 +0530 Subject: [PATCH 22/35] add missing deps --- appinventor/component-annotations/build.gradle.kts | 4 ++++ appinventor/components/build.gradle.kts | 2 ++ 2 files changed, 6 insertions(+) diff --git a/appinventor/component-annotations/build.gradle.kts b/appinventor/component-annotations/build.gradle.kts index f6727627a17..4313730f397 100644 --- a/appinventor/component-annotations/build.gradle.kts +++ b/appinventor/component-annotations/build.gradle.kts @@ -1,3 +1,7 @@ plugins { `java-library` } + +dependencies { + implementation(projects.componentConstants) +} diff --git a/appinventor/components/build.gradle.kts b/appinventor/components/build.gradle.kts index cccb0eb1bdb..2c9f1ce5609 100644 --- a/appinventor/components/build.gradle.kts +++ b/appinventor/components/build.gradle.kts @@ -39,5 +39,7 @@ android { dependencies { implementation(projects.componentConstants) + implementation(projects.componentAnnotations) implementation(projects.barcode) + annotationProcessor(projects.componentScripts) } From 55aa3b09b94c1d324255330379d45074d687dd6c Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Thu, 4 Aug 2022 18:24:57 +0530 Subject: [PATCH 23/35] Remove unused files --- .../zxing/client/android/BuildConfig.java | 6 - appinventor/components/misc/android/README | 5 - .../components/misc/android/package-list | 3166 ----------------- 3 files changed, 3177 deletions(-) delete mode 100644 appinventor/barcode/src/main/java/com/google/zxing/client/android/BuildConfig.java delete mode 100644 appinventor/components/misc/android/README delete mode 100644 appinventor/components/misc/android/package-list diff --git a/appinventor/barcode/src/main/java/com/google/zxing/client/android/BuildConfig.java b/appinventor/barcode/src/main/java/com/google/zxing/client/android/BuildConfig.java deleted file mode 100644 index 2c405e8adf4..00000000000 --- a/appinventor/barcode/src/main/java/com/google/zxing/client/android/BuildConfig.java +++ /dev/null @@ -1,6 +0,0 @@ -/** Automatically generated file. DO NOT MODIFY */ -package com.google.zxing.client.android; - -public final class BuildConfig { - public final static boolean DEBUG = true; -} \ No newline at end of file diff --git a/appinventor/components/misc/android/README b/appinventor/components/misc/android/README deleted file mode 100644 index c2afcf4b9f4..00000000000 --- a/appinventor/components/misc/android/README +++ /dev/null @@ -1,5 +0,0 @@ -We need the file package-list (which must have that exact title) to generate the -external Javadoc references to the Android Javadoc pages at http://d.android.com/reference. -This is necessary because the standard URL "http://d.android.com/reference/package-list" -doesn't work. We obtained the file by removing the JavaScript from -"http://developer.android.com/reference/lists.js". diff --git a/appinventor/components/misc/android/package-list b/appinventor/components/misc/android/package-list deleted file mode 100644 index 93dfbfb2e97..00000000000 --- a/appinventor/components/misc/android/package-list +++ /dev/null @@ -1,3166 +0,0 @@ -android -android.Manifest -android.Manifest.permission -android.Manifest.permission_group -android.R -android.R.anim -android.R.animator -android.R.array -android.R.attr -android.R.bool -android.R.color -android.R.dimen -android.R.drawable -android.R.fraction -android.R.id -android.R.integer -android.R.interpolator -android.R.layout -android.R.menu -android.R.mipmap -android.R.plurals -android.R.raw -android.R.string -android.R.style -android.R.styleable -android.R.xml -android.accessibilityservice -android.accessibilityservice.AccessibilityService -android.accessibilityservice.AccessibilityServiceInfo -android.accounts -android.accounts.AbstractAccountAuthenticator -android.accounts.Account -android.accounts.AccountAuthenticatorActivity -android.accounts.AccountAuthenticatorResponse -android.accounts.AccountManager -android.accounts.AccountManagerCallback -android.accounts.AccountManagerFuture -android.accounts.AccountsException -android.accounts.AuthenticatorDescription -android.accounts.AuthenticatorException -android.accounts.NetworkErrorException -android.accounts.OnAccountsUpdateListener -android.accounts.OperationCanceledException -android.animation -android.animation.Animator -android.animation.Animator.AnimatorListener -android.animation.AnimatorInflater -android.animation.AnimatorListenerAdapter -android.animation.AnimatorSet -android.animation.AnimatorSet.Builder -android.animation.ArgbEvaluator -android.animation.FloatEvaluator -android.animation.IntEvaluator -android.animation.Keyframe -android.animation.LayoutTransition -android.animation.LayoutTransition.TransitionListener -android.animation.ObjectAnimator -android.animation.PropertyValuesHolder -android.animation.TimeInterpolator -android.animation.TypeEvaluator -android.animation.ValueAnimator -android.animation.ValueAnimator.AnimatorUpdateListener -android.app -android.app.ActionBar -android.app.ActionBar.LayoutParams -android.app.ActionBar.OnMenuVisibilityListener -android.app.ActionBar.OnNavigationListener -android.app.ActionBar.Tab -android.app.ActionBar.TabListener -android.app.Activity -android.app.ActivityGroup -android.app.ActivityManager -android.app.ActivityManager.MemoryInfo -android.app.ActivityManager.ProcessErrorStateInfo -android.app.ActivityManager.RecentTaskInfo -android.app.ActivityManager.RunningAppProcessInfo -android.app.ActivityManager.RunningServiceInfo -android.app.ActivityManager.RunningTaskInfo -android.app.AlarmManager -android.app.AlertDialog -android.app.AlertDialog.Builder -android.app.AliasActivity -android.app.Application -android.app.DatePickerDialog -android.app.DatePickerDialog.OnDateSetListener -android.app.Dialog -android.app.DialogFragment -android.app.DownloadManager -android.app.DownloadManager.Query -android.app.DownloadManager.Request -android.app.ExpandableListActivity -android.app.Fragment -android.app.Fragment.InstantiationException -android.app.Fragment.SavedState -android.app.FragmentBreadCrumbs -android.app.FragmentBreadCrumbs.OnBreadCrumbClickListener -android.app.FragmentManager -android.app.FragmentManager.BackStackEntry -android.app.FragmentManager.OnBackStackChangedListener -android.app.FragmentTransaction -android.app.Instrumentation -android.app.Instrumentation.ActivityMonitor -android.app.Instrumentation.ActivityResult -android.app.IntentService -android.app.KeyguardManager -android.app.KeyguardManager.KeyguardLock -android.app.KeyguardManager.OnKeyguardExitResult -android.app.LauncherActivity -android.app.LauncherActivity.IconResizer -android.app.LauncherActivity.ListItem -android.app.ListActivity -android.app.ListFragment -android.app.LoaderManager -android.app.LoaderManager.LoaderCallbacks -android.app.LocalActivityManager -android.app.NativeActivity -android.app.Notification -android.app.Notification.Builder -android.app.NotificationManager -android.app.PendingIntent -android.app.PendingIntent.CanceledException -android.app.PendingIntent.OnFinished -android.app.ProgressDialog -android.app.SearchManager -android.app.SearchManager.OnCancelListener -android.app.SearchManager.OnDismissListener -android.app.SearchableInfo -android.app.Service -android.app.TabActivity -android.app.TimePickerDialog -android.app.TimePickerDialog.OnTimeSetListener -android.app.UiModeManager -android.app.WallpaperInfo -android.app.WallpaperManager -android.app.admin -android.app.admin.DeviceAdminInfo -android.app.admin.DeviceAdminReceiver -android.app.admin.DevicePolicyManager -android.app.backup -android.app.backup.BackupAgent -android.app.backup.BackupAgentHelper -android.app.backup.BackupDataInput -android.app.backup.BackupDataInputStream -android.app.backup.BackupDataOutput -android.app.backup.BackupHelper -android.app.backup.BackupManager -android.app.backup.FileBackupHelper -android.app.backup.RestoreObserver -android.app.backup.SharedPreferencesBackupHelper -android.appwidget -android.appwidget.AppWidgetHost -android.appwidget.AppWidgetHostView -android.appwidget.AppWidgetManager -android.appwidget.AppWidgetProvider -android.appwidget.AppWidgetProviderInfo -android.bluetooth -android.bluetooth.BluetoothA2dp -android.bluetooth.BluetoothAdapter -android.bluetooth.BluetoothAssignedNumbers -android.bluetooth.BluetoothClass -android.bluetooth.BluetoothClass.Device -android.bluetooth.BluetoothClass.Device.Major -android.bluetooth.BluetoothClass.Service -android.bluetooth.BluetoothDevice -android.bluetooth.BluetoothHeadset -android.bluetooth.BluetoothProfile -android.bluetooth.BluetoothProfile.ServiceListener -android.bluetooth.BluetoothServerSocket -android.bluetooth.BluetoothSocket -android.content -android.content.AbstractThreadedSyncAdapter -android.content.ActivityNotFoundException -android.content.AsyncQueryHandler -android.content.AsyncQueryHandler.WorkerArgs -android.content.AsyncQueryHandler.WorkerHandler -android.content.AsyncTaskLoader -android.content.BroadcastReceiver -android.content.BroadcastReceiver.PendingResult -android.content.ClipData -android.content.ClipData.Item -android.content.ClipDescription -android.content.ClipboardManager -android.content.ClipboardManager.OnPrimaryClipChangedListener -android.content.ComponentCallbacks -android.content.ComponentName -android.content.ContentProvider -android.content.ContentProvider.PipeDataWriter -android.content.ContentProviderClient -android.content.ContentProviderOperation -android.content.ContentProviderOperation.Builder -android.content.ContentProviderResult -android.content.ContentQueryMap -android.content.ContentResolver -android.content.ContentUris -android.content.ContentValues -android.content.Context -android.content.ContextWrapper -android.content.CursorLoader -android.content.DialogInterface -android.content.DialogInterface.OnCancelListener -android.content.DialogInterface.OnClickListener -android.content.DialogInterface.OnDismissListener -android.content.DialogInterface.OnKeyListener -android.content.DialogInterface.OnMultiChoiceClickListener -android.content.DialogInterface.OnShowListener -android.content.Entity -android.content.Entity.NamedContentValues -android.content.EntityIterator -android.content.Intent -android.content.Intent.FilterComparison -android.content.Intent.ShortcutIconResource -android.content.IntentFilter -android.content.IntentFilter.AuthorityEntry -android.content.IntentFilter.MalformedMimeTypeException -android.content.IntentSender -android.content.IntentSender.OnFinished -android.content.IntentSender.SendIntentException -android.content.Loader -android.content.Loader.ForceLoadContentObserver -android.content.Loader.OnLoadCompleteListener -android.content.MutableContextWrapper -android.content.OperationApplicationException -android.content.PeriodicSync -android.content.ReceiverCallNotAllowedException -android.content.SearchRecentSuggestionsProvider -android.content.ServiceConnection -android.content.SharedPreferences -android.content.SharedPreferences.Editor -android.content.SharedPreferences.OnSharedPreferenceChangeListener -android.content.SyncAdapterType -android.content.SyncContext -android.content.SyncInfo -android.content.SyncResult -android.content.SyncStats -android.content.SyncStatusObserver -android.content.UriMatcher -android.content.pm -android.content.pm.ActivityInfo -android.content.pm.ApplicationInfo -android.content.pm.ApplicationInfo.DisplayNameComparator -android.content.pm.ComponentInfo -android.content.pm.ConfigurationInfo -android.content.pm.FeatureInfo -android.content.pm.InstrumentationInfo -android.content.pm.LabeledIntent -android.content.pm.PackageInfo -android.content.pm.PackageItemInfo -android.content.pm.PackageItemInfo.DisplayNameComparator -android.content.pm.PackageManager -android.content.pm.PackageManager.NameNotFoundException -android.content.pm.PackageStats -android.content.pm.PathPermission -android.content.pm.PermissionGroupInfo -android.content.pm.PermissionInfo -android.content.pm.ProviderInfo -android.content.pm.ResolveInfo -android.content.pm.ResolveInfo.DisplayNameComparator -android.content.pm.ServiceInfo -android.content.pm.Signature -android.content.res -android.content.res.AssetFileDescriptor -android.content.res.AssetFileDescriptor.AutoCloseInputStream -android.content.res.AssetFileDescriptor.AutoCloseOutputStream -android.content.res.AssetManager -android.content.res.AssetManager.AssetInputStream -android.content.res.ColorStateList -android.content.res.Configuration -android.content.res.ObbInfo -android.content.res.ObbScanner -android.content.res.Resources -android.content.res.Resources.NotFoundException -android.content.res.Resources.Theme -android.content.res.TypedArray -android.content.res.XmlResourceParser -android.database -android.database.AbstractCursor -android.database.AbstractCursor.SelfContentObserver -android.database.AbstractWindowedCursor -android.database.CharArrayBuffer -android.database.ContentObservable -android.database.ContentObserver -android.database.CrossProcessCursor -android.database.Cursor -android.database.CursorIndexOutOfBoundsException -android.database.CursorJoiner -android.database.CursorJoiner.Result -android.database.CursorWindow -android.database.CursorWrapper -android.database.DataSetObservable -android.database.DataSetObserver -android.database.DatabaseErrorHandler -android.database.DatabaseUtils -android.database.DatabaseUtils.InsertHelper -android.database.DefaultDatabaseErrorHandler -android.database.MatrixCursor -android.database.MatrixCursor.RowBuilder -android.database.MergeCursor -android.database.Observable -android.database.SQLException -android.database.StaleDataException -android.database.sqlite -android.database.sqlite.SQLiteAbortException -android.database.sqlite.SQLiteAccessPermException -android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException -android.database.sqlite.SQLiteBlobTooBigException -android.database.sqlite.SQLiteCantOpenDatabaseException -android.database.sqlite.SQLiteClosable -android.database.sqlite.SQLiteConstraintException -android.database.sqlite.SQLiteCursor -android.database.sqlite.SQLiteCursorDriver -android.database.sqlite.SQLiteDatabase -android.database.sqlite.SQLiteDatabase.CursorFactory -android.database.sqlite.SQLiteDatabaseCorruptException -android.database.sqlite.SQLiteDatabaseLockedException -android.database.sqlite.SQLiteDatatypeMismatchException -android.database.sqlite.SQLiteDiskIOException -android.database.sqlite.SQLiteDoneException -android.database.sqlite.SQLiteException -android.database.sqlite.SQLiteFullException -android.database.sqlite.SQLiteMisuseException -android.database.sqlite.SQLiteOpenHelper -android.database.sqlite.SQLiteOutOfMemoryException -android.database.sqlite.SQLiteProgram -android.database.sqlite.SQLiteQuery -android.database.sqlite.SQLiteQueryBuilder -android.database.sqlite.SQLiteReadOnlyDatabaseException -android.database.sqlite.SQLiteStatement -android.database.sqlite.SQLiteTableLockedException -android.database.sqlite.SQLiteTransactionListener -android.drm -android.drm.DrmConvertedStatus -android.drm.DrmErrorEvent -android.drm.DrmEvent -android.drm.DrmInfo -android.drm.DrmInfoEvent -android.drm.DrmInfoRequest -android.drm.DrmInfoStatus -android.drm.DrmManagerClient -android.drm.DrmManagerClient.OnErrorListener -android.drm.DrmManagerClient.OnEventListener -android.drm.DrmManagerClient.OnInfoListener -android.drm.DrmRights -android.drm.DrmStore -android.drm.DrmStore.Action -android.drm.DrmStore.ConstraintsColumns -android.drm.DrmStore.DrmObjectType -android.drm.DrmStore.Playback -android.drm.DrmStore.RightsStatus -android.drm.DrmSupportInfo -android.drm.DrmUtils -android.drm.DrmUtils.ExtendedMetadataParser -android.drm.ProcessedData -android.gesture -android.gesture.Gesture -android.gesture.GestureLibraries -android.gesture.GestureLibrary -android.gesture.GestureOverlayView -android.gesture.GestureOverlayView.OnGestureListener -android.gesture.GestureOverlayView.OnGesturePerformedListener -android.gesture.GestureOverlayView.OnGesturingListener -android.gesture.GesturePoint -android.gesture.GestureStore -android.gesture.GestureStroke -android.gesture.GestureUtils -android.gesture.OrientedBoundingBox -android.gesture.Prediction -android.graphics -android.graphics.AvoidXfermode -android.graphics.AvoidXfermode.Mode -android.graphics.Bitmap -android.graphics.Bitmap.CompressFormat -android.graphics.Bitmap.Config -android.graphics.BitmapFactory -android.graphics.BitmapFactory.Options -android.graphics.BitmapRegionDecoder -android.graphics.BitmapShader -android.graphics.BlurMaskFilter -android.graphics.BlurMaskFilter.Blur -android.graphics.Camera -android.graphics.Canvas -android.graphics.Canvas.EdgeType -android.graphics.Canvas.VertexMode -android.graphics.Color -android.graphics.ColorFilter -android.graphics.ColorMatrix -android.graphics.ColorMatrixColorFilter -android.graphics.ComposePathEffect -android.graphics.ComposeShader -android.graphics.CornerPathEffect -android.graphics.DashPathEffect -android.graphics.DiscretePathEffect -android.graphics.DrawFilter -android.graphics.EmbossMaskFilter -android.graphics.ImageFormat -android.graphics.Interpolator -android.graphics.Interpolator.Result -android.graphics.LayerRasterizer -android.graphics.LightingColorFilter -android.graphics.LinearGradient -android.graphics.MaskFilter -android.graphics.Matrix -android.graphics.Matrix.ScaleToFit -android.graphics.Movie -android.graphics.NinePatch -android.graphics.Paint -android.graphics.Paint.Align -android.graphics.Paint.Cap -android.graphics.Paint.FontMetrics -android.graphics.Paint.FontMetricsInt -android.graphics.Paint.Join -android.graphics.Paint.Style -android.graphics.PaintFlagsDrawFilter -android.graphics.Path -android.graphics.Path.Direction -android.graphics.Path.FillType -android.graphics.PathDashPathEffect -android.graphics.PathDashPathEffect.Style -android.graphics.PathEffect -android.graphics.PathMeasure -android.graphics.Picture -android.graphics.PixelFormat -android.graphics.PixelXorXfermode -android.graphics.Point -android.graphics.PointF -android.graphics.PorterDuff -android.graphics.PorterDuff.Mode -android.graphics.PorterDuffColorFilter -android.graphics.PorterDuffXfermode -android.graphics.RadialGradient -android.graphics.Rasterizer -android.graphics.Rect -android.graphics.RectF -android.graphics.Region -android.graphics.Region.Op -android.graphics.RegionIterator -android.graphics.Shader -android.graphics.Shader.TileMode -android.graphics.SumPathEffect -android.graphics.SurfaceTexture -android.graphics.SurfaceTexture.OnFrameAvailableListener -android.graphics.SurfaceTexture.OutOfResourcesException -android.graphics.SweepGradient -android.graphics.Typeface -android.graphics.Xfermode -android.graphics.YuvImage -android.graphics.drawable -android.graphics.drawable.Animatable -android.graphics.drawable.AnimationDrawable -android.graphics.drawable.BitmapDrawable -android.graphics.drawable.ClipDrawable -android.graphics.drawable.ColorDrawable -android.graphics.drawable.Drawable -android.graphics.drawable.Drawable.Callback -android.graphics.drawable.Drawable.ConstantState -android.graphics.drawable.DrawableContainer -android.graphics.drawable.DrawableContainer.DrawableContainerState -android.graphics.drawable.GradientDrawable -android.graphics.drawable.GradientDrawable.Orientation -android.graphics.drawable.InsetDrawable -android.graphics.drawable.LayerDrawable -android.graphics.drawable.LevelListDrawable -android.graphics.drawable.NinePatchDrawable -android.graphics.drawable.PaintDrawable -android.graphics.drawable.PictureDrawable -android.graphics.drawable.RotateDrawable -android.graphics.drawable.ScaleDrawable -android.graphics.drawable.ShapeDrawable -android.graphics.drawable.ShapeDrawable.ShaderFactory -android.graphics.drawable.StateListDrawable -android.graphics.drawable.TransitionDrawable -android.graphics.drawable.shapes -android.graphics.drawable.shapes.ArcShape -android.graphics.drawable.shapes.OvalShape -android.graphics.drawable.shapes.PathShape -android.graphics.drawable.shapes.RectShape -android.graphics.drawable.shapes.RoundRectShape -android.graphics.drawable.shapes.Shape -android.hardware -android.hardware.Camera -android.hardware.Camera.AutoFocusCallback -android.hardware.Camera.CameraInfo -android.hardware.Camera.ErrorCallback -android.hardware.Camera.OnZoomChangeListener -android.hardware.Camera.Parameters -android.hardware.Camera.PictureCallback -android.hardware.Camera.PreviewCallback -android.hardware.Camera.ShutterCallback -android.hardware.Camera.Size -android.hardware.GeomagneticField -android.hardware.Sensor -android.hardware.SensorEvent -android.hardware.SensorEventListener -android.hardware.SensorListener -android.hardware.SensorManager -android.hardware.usb -android.hardware.usb.UsbAccessory -android.hardware.usb.UsbConstants -android.hardware.usb.UsbDevice -android.hardware.usb.UsbDeviceConnection -android.hardware.usb.UsbEndpoint -android.hardware.usb.UsbInterface -android.hardware.usb.UsbManager -android.hardware.usb.UsbRequest -android.inputmethodservice -android.inputmethodservice.AbstractInputMethodService -android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl -android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl -android.inputmethodservice.ExtractEditText -android.inputmethodservice.InputMethodService -android.inputmethodservice.InputMethodService.InputMethodImpl -android.inputmethodservice.InputMethodService.InputMethodSessionImpl -android.inputmethodservice.InputMethodService.Insets -android.inputmethodservice.Keyboard -android.inputmethodservice.Keyboard.Key -android.inputmethodservice.Keyboard.Row -android.inputmethodservice.KeyboardView -android.inputmethodservice.KeyboardView.OnKeyboardActionListener -android.location -android.location.Address -android.location.Criteria -android.location.Geocoder -android.location.GpsSatellite -android.location.GpsStatus -android.location.GpsStatus.Listener -android.location.GpsStatus.NmeaListener -android.location.Location -android.location.LocationListener -android.location.LocationManager -android.location.LocationProvider -android.media -android.media.AsyncPlayer -android.media.AudioFormat -android.media.AudioManager -android.media.AudioManager.OnAudioFocusChangeListener -android.media.AudioRecord -android.media.AudioRecord.OnRecordPositionUpdateListener -android.media.AudioTrack -android.media.AudioTrack.OnPlaybackPositionUpdateListener -android.media.CamcorderProfile -android.media.CameraProfile -android.media.ExifInterface -android.media.FaceDetector -android.media.FaceDetector.Face -android.media.JetPlayer -android.media.JetPlayer.OnJetEventListener -android.media.MediaMetadataRetriever -android.media.MediaPlayer -android.media.MediaPlayer.OnBufferingUpdateListener -android.media.MediaPlayer.OnCompletionListener -android.media.MediaPlayer.OnErrorListener -android.media.MediaPlayer.OnInfoListener -android.media.MediaPlayer.OnPreparedListener -android.media.MediaPlayer.OnSeekCompleteListener -android.media.MediaPlayer.OnVideoSizeChangedListener -android.media.MediaRecorder -android.media.MediaRecorder.AudioEncoder -android.media.MediaRecorder.AudioSource -android.media.MediaRecorder.OnErrorListener -android.media.MediaRecorder.OnInfoListener -android.media.MediaRecorder.OutputFormat -android.media.MediaRecorder.VideoEncoder -android.media.MediaRecorder.VideoSource -android.media.MediaScannerConnection -android.media.MediaScannerConnection.MediaScannerConnectionClient -android.media.MediaScannerConnection.OnScanCompletedListener -android.media.Ringtone -android.media.RingtoneManager -android.media.SoundPool -android.media.SoundPool.OnLoadCompleteListener -android.media.ThumbnailUtils -android.media.ToneGenerator -android.media.audiofx -android.media.audiofx.AudioEffect -android.media.audiofx.AudioEffect.Descriptor -android.media.audiofx.AudioEffect.OnControlStatusChangeListener -android.media.audiofx.AudioEffect.OnEnableStatusChangeListener -android.media.audiofx.BassBoost -android.media.audiofx.BassBoost.OnParameterChangeListener -android.media.audiofx.BassBoost.Settings -android.media.audiofx.EnvironmentalReverb -android.media.audiofx.EnvironmentalReverb.OnParameterChangeListener -android.media.audiofx.EnvironmentalReverb.Settings -android.media.audiofx.Equalizer -android.media.audiofx.Equalizer.OnParameterChangeListener -android.media.audiofx.Equalizer.Settings -android.media.audiofx.PresetReverb -android.media.audiofx.PresetReverb.OnParameterChangeListener -android.media.audiofx.PresetReverb.Settings -android.media.audiofx.Virtualizer -android.media.audiofx.Virtualizer.OnParameterChangeListener -android.media.audiofx.Virtualizer.Settings -android.media.audiofx.Visualizer -android.media.audiofx.Visualizer.OnDataCaptureListener -android.mtp -android.mtp.MtpConstants -android.mtp.MtpDevice -android.mtp.MtpDeviceInfo -android.mtp.MtpObjectInfo -android.mtp.MtpStorageInfo -android.net -android.net.ConnectivityManager -android.net.Credentials -android.net.DhcpInfo -android.net.LocalServerSocket -android.net.LocalSocket -android.net.LocalSocketAddress -android.net.LocalSocketAddress.Namespace -android.net.MailTo -android.net.NetworkInfo -android.net.NetworkInfo.DetailedState -android.net.NetworkInfo.State -android.net.ParseException -android.net.Proxy -android.net.SSLCertificateSocketFactory -android.net.SSLSessionCache -android.net.TrafficStats -android.net.Uri -android.net.Uri.Builder -android.net.UrlQuerySanitizer -android.net.UrlQuerySanitizer.IllegalCharacterValueSanitizer -android.net.UrlQuerySanitizer.ParameterValuePair -android.net.UrlQuerySanitizer.ValueSanitizer -android.net.http -android.net.http.AndroidHttpClient -android.net.http.SslCertificate -android.net.http.SslCertificate.DName -android.net.http.SslError -android.net.rtp -android.net.rtp.AudioCodec -android.net.rtp.AudioGroup -android.net.rtp.AudioStream -android.net.rtp.RtpStream -android.net.sip -android.net.sip.SipAudioCall -android.net.sip.SipAudioCall.Listener -android.net.sip.SipErrorCode -android.net.sip.SipException -android.net.sip.SipManager -android.net.sip.SipProfile -android.net.sip.SipProfile.Builder -android.net.sip.SipRegistrationListener -android.net.sip.SipSession -android.net.sip.SipSession.Listener -android.net.sip.SipSession.State -android.net.wifi -android.net.wifi.ScanResult -android.net.wifi.SupplicantState -android.net.wifi.WifiConfiguration -android.net.wifi.WifiConfiguration.AuthAlgorithm -android.net.wifi.WifiConfiguration.GroupCipher -android.net.wifi.WifiConfiguration.KeyMgmt -android.net.wifi.WifiConfiguration.PairwiseCipher -android.net.wifi.WifiConfiguration.Protocol -android.net.wifi.WifiConfiguration.Status -android.net.wifi.WifiInfo -android.net.wifi.WifiManager -android.net.wifi.WifiManager.MulticastLock -android.net.wifi.WifiManager.WifiLock -android.nfc -android.nfc.FormatException -android.nfc.NdefMessage -android.nfc.NdefRecord -android.nfc.NfcAdapter -android.nfc.NfcManager -android.nfc.Tag -android.nfc.TagLostException -android.nfc.tech -android.nfc.tech.IsoDep -android.nfc.tech.MifareClassic -android.nfc.tech.MifareUltralight -android.nfc.tech.Ndef -android.nfc.tech.NdefFormatable -android.nfc.tech.NfcA -android.nfc.tech.NfcB -android.nfc.tech.NfcF -android.nfc.tech.NfcV -android.nfc.tech.TagTechnology -android.opengl -android.opengl.ETC1 -android.opengl.ETC1Util -android.opengl.ETC1Util.ETC1Texture -android.opengl.GLDebugHelper -android.opengl.GLES10 -android.opengl.GLES10Ext -android.opengl.GLES11 -android.opengl.GLES11Ext -android.opengl.GLES20 -android.opengl.GLException -android.opengl.GLSurfaceView -android.opengl.GLSurfaceView.EGLConfigChooser -android.opengl.GLSurfaceView.EGLContextFactory -android.opengl.GLSurfaceView.EGLWindowSurfaceFactory -android.opengl.GLSurfaceView.GLWrapper -android.opengl.GLSurfaceView.Renderer -android.opengl.GLU -android.opengl.GLUtils -android.opengl.Matrix -android.opengl.Visibility -android.os -android.os.AsyncTask -android.os.AsyncTask.Status -android.os.BadParcelableException -android.os.BatteryManager -android.os.Binder -android.os.Build -android.os.Build.VERSION -android.os.Build.VERSION_CODES -android.os.Bundle -android.os.ConditionVariable -android.os.CountDownTimer -android.os.DeadObjectException -android.os.Debug -android.os.Debug.InstructionCount -android.os.Debug.MemoryInfo -android.os.DropBoxManager -android.os.DropBoxManager.Entry -android.os.Environment -android.os.FileObserver -android.os.Handler -android.os.Handler.Callback -android.os.HandlerThread -android.os.IBinder -android.os.IBinder.DeathRecipient -android.os.IInterface -android.os.Looper -android.os.MemoryFile -android.os.Message -android.os.MessageQueue -android.os.MessageQueue.IdleHandler -android.os.Messenger -android.os.NetworkOnMainThreadException -android.os.Parcel -android.os.ParcelFileDescriptor -android.os.ParcelFileDescriptor.AutoCloseInputStream -android.os.ParcelFileDescriptor.AutoCloseOutputStream -android.os.ParcelFormatException -android.os.ParcelUuid -android.os.Parcelable -android.os.Parcelable.ClassLoaderCreator -android.os.Parcelable.Creator -android.os.PatternMatcher -android.os.PowerManager -android.os.PowerManager.WakeLock -android.os.Process -android.os.RecoverySystem -android.os.RecoverySystem.ProgressListener -android.os.RemoteCallbackList -android.os.RemoteException -android.os.ResultReceiver -android.os.StatFs -android.os.StrictMode -android.os.StrictMode.ThreadPolicy -android.os.StrictMode.ThreadPolicy.Builder -android.os.StrictMode.VmPolicy -android.os.StrictMode.VmPolicy.Builder -android.os.SystemClock -android.os.TokenWatcher -android.os.Vibrator -android.os.WorkSource -android.os.storage -android.os.storage.OnObbStateChangeListener -android.os.storage.StorageManager -android.preference -android.preference.CheckBoxPreference -android.preference.DialogPreference -android.preference.EditTextPreference -android.preference.ListPreference -android.preference.MultiSelectListPreference -android.preference.Preference -android.preference.Preference.BaseSavedState -android.preference.Preference.OnPreferenceChangeListener -android.preference.Preference.OnPreferenceClickListener -android.preference.PreferenceActivity -android.preference.PreferenceActivity.Header -android.preference.PreferenceCategory -android.preference.PreferenceFragment -android.preference.PreferenceFragment.OnPreferenceStartFragmentCallback -android.preference.PreferenceGroup -android.preference.PreferenceManager -android.preference.PreferenceManager.OnActivityDestroyListener -android.preference.PreferenceManager.OnActivityResultListener -android.preference.PreferenceManager.OnActivityStopListener -android.preference.PreferenceScreen -android.preference.RingtonePreference -android.provider -android.provider.AlarmClock -android.provider.BaseColumns -android.provider.Browser -android.provider.Browser.BookmarkColumns -android.provider.Browser.SearchColumns -android.provider.CallLog -android.provider.CallLog.Calls -android.provider.Contacts -android.provider.Contacts.ContactMethods -android.provider.Contacts.ContactMethodsColumns -android.provider.Contacts.Extensions -android.provider.Contacts.ExtensionsColumns -android.provider.Contacts.GroupMembership -android.provider.Contacts.Groups -android.provider.Contacts.GroupsColumns -android.provider.Contacts.Intents -android.provider.Contacts.Intents.Insert -android.provider.Contacts.Intents.UI -android.provider.Contacts.OrganizationColumns -android.provider.Contacts.Organizations -android.provider.Contacts.People -android.provider.Contacts.People.ContactMethods -android.provider.Contacts.People.Extensions -android.provider.Contacts.People.Phones -android.provider.Contacts.PeopleColumns -android.provider.Contacts.Phones -android.provider.Contacts.PhonesColumns -android.provider.Contacts.Photos -android.provider.Contacts.PhotosColumns -android.provider.Contacts.PresenceColumns -android.provider.Contacts.Settings -android.provider.Contacts.SettingsColumns -android.provider.ContactsContract -android.provider.ContactsContract.AggregationExceptions -android.provider.ContactsContract.BaseSyncColumns -android.provider.ContactsContract.CommonDataKinds -android.provider.ContactsContract.CommonDataKinds.BaseTypes -android.provider.ContactsContract.CommonDataKinds.CommonColumns -android.provider.ContactsContract.CommonDataKinds.Email -android.provider.ContactsContract.CommonDataKinds.Event -android.provider.ContactsContract.CommonDataKinds.GroupMembership -android.provider.ContactsContract.CommonDataKinds.Im -android.provider.ContactsContract.CommonDataKinds.Nickname -android.provider.ContactsContract.CommonDataKinds.Note -android.provider.ContactsContract.CommonDataKinds.Organization -android.provider.ContactsContract.CommonDataKinds.Phone -android.provider.ContactsContract.CommonDataKinds.Photo -android.provider.ContactsContract.CommonDataKinds.Relation -android.provider.ContactsContract.CommonDataKinds.SipAddress -android.provider.ContactsContract.CommonDataKinds.StructuredName -android.provider.ContactsContract.CommonDataKinds.StructuredPostal -android.provider.ContactsContract.CommonDataKinds.Website -android.provider.ContactsContract.ContactNameColumns -android.provider.ContactsContract.ContactOptionsColumns -android.provider.ContactsContract.ContactStatusColumns -android.provider.ContactsContract.Contacts -android.provider.ContactsContract.Contacts.AggregationSuggestions -android.provider.ContactsContract.Contacts.Data -android.provider.ContactsContract.Contacts.Entity -android.provider.ContactsContract.Contacts.Photo -android.provider.ContactsContract.ContactsColumns -android.provider.ContactsContract.Data -android.provider.ContactsContract.DataColumns -android.provider.ContactsContract.DataColumnsWithJoins -android.provider.ContactsContract.Directory -android.provider.ContactsContract.DisplayNameSources -android.provider.ContactsContract.FullNameStyle -android.provider.ContactsContract.Groups -android.provider.ContactsContract.GroupsColumns -android.provider.ContactsContract.Intents -android.provider.ContactsContract.Intents.Insert -android.provider.ContactsContract.PhoneLookup -android.provider.ContactsContract.PhoneLookupColumns -android.provider.ContactsContract.PhoneticNameStyle -android.provider.ContactsContract.Presence -android.provider.ContactsContract.PresenceColumns -android.provider.ContactsContract.QuickContact -android.provider.ContactsContract.RawContacts -android.provider.ContactsContract.RawContacts.Data -android.provider.ContactsContract.RawContacts.Entity -android.provider.ContactsContract.RawContactsColumns -android.provider.ContactsContract.RawContactsEntity -android.provider.ContactsContract.Settings -android.provider.ContactsContract.SettingsColumns -android.provider.ContactsContract.StatusColumns -android.provider.ContactsContract.StatusUpdates -android.provider.ContactsContract.SyncColumns -android.provider.ContactsContract.SyncState -android.provider.LiveFolders -android.provider.MediaStore -android.provider.MediaStore.Audio -android.provider.MediaStore.Audio.AlbumColumns -android.provider.MediaStore.Audio.Albums -android.provider.MediaStore.Audio.ArtistColumns -android.provider.MediaStore.Audio.Artists -android.provider.MediaStore.Audio.Artists.Albums -android.provider.MediaStore.Audio.AudioColumns -android.provider.MediaStore.Audio.Genres -android.provider.MediaStore.Audio.Genres.Members -android.provider.MediaStore.Audio.GenresColumns -android.provider.MediaStore.Audio.Media -android.provider.MediaStore.Audio.Playlists -android.provider.MediaStore.Audio.Playlists.Members -android.provider.MediaStore.Audio.PlaylistsColumns -android.provider.MediaStore.Files -android.provider.MediaStore.Files.FileColumns -android.provider.MediaStore.Images -android.provider.MediaStore.Images.ImageColumns -android.provider.MediaStore.Images.Media -android.provider.MediaStore.Images.Thumbnails -android.provider.MediaStore.MediaColumns -android.provider.MediaStore.Video -android.provider.MediaStore.Video.Media -android.provider.MediaStore.Video.Thumbnails -android.provider.MediaStore.Video.VideoColumns -android.provider.OpenableColumns -android.provider.SearchRecentSuggestions -android.provider.Settings -android.provider.Settings.NameValueTable -android.provider.Settings.Secure -android.provider.Settings.SettingNotFoundException -android.provider.Settings.System -android.provider.SyncStateContract -android.provider.SyncStateContract.Columns -android.provider.SyncStateContract.Constants -android.provider.SyncStateContract.Helpers -android.provider.UserDictionary -android.provider.UserDictionary.Words -android.renderscript -android.renderscript.Allocation -android.renderscript.Allocation.MipmapControl -android.renderscript.AllocationAdapter -android.renderscript.Byte2 -android.renderscript.Byte3 -android.renderscript.Byte4 -android.renderscript.Element -android.renderscript.Element.Builder -android.renderscript.Element.DataKind -android.renderscript.Element.DataType -android.renderscript.FieldPacker -android.renderscript.FileA3D -android.renderscript.FileA3D.EntryType -android.renderscript.FileA3D.IndexEntry -android.renderscript.Float2 -android.renderscript.Float3 -android.renderscript.Float4 -android.renderscript.Font -android.renderscript.Font.Style -android.renderscript.Int2 -android.renderscript.Int3 -android.renderscript.Int4 -android.renderscript.Long2 -android.renderscript.Long3 -android.renderscript.Long4 -android.renderscript.Matrix2f -android.renderscript.Matrix3f -android.renderscript.Matrix4f -android.renderscript.Mesh -android.renderscript.Mesh.AllocationBuilder -android.renderscript.Mesh.Builder -android.renderscript.Mesh.Primitive -android.renderscript.Mesh.TriangleMeshBuilder -android.renderscript.Program -android.renderscript.Program.BaseProgramBuilder -android.renderscript.Program.TextureType -android.renderscript.ProgramFragment -android.renderscript.ProgramFragment.Builder -android.renderscript.ProgramFragmentFixedFunction -android.renderscript.ProgramFragmentFixedFunction.Builder -android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode -android.renderscript.ProgramFragmentFixedFunction.Builder.Format -android.renderscript.ProgramRaster -android.renderscript.ProgramRaster.Builder -android.renderscript.ProgramRaster.CullMode -android.renderscript.ProgramStore -android.renderscript.ProgramStore.BlendDstFunc -android.renderscript.ProgramStore.BlendSrcFunc -android.renderscript.ProgramStore.Builder -android.renderscript.ProgramStore.DepthFunc -android.renderscript.ProgramVertex -android.renderscript.ProgramVertex.Builder -android.renderscript.ProgramVertexFixedFunction -android.renderscript.ProgramVertexFixedFunction.Builder -android.renderscript.ProgramVertexFixedFunction.Constants -android.renderscript.RSDriverException -android.renderscript.RSIllegalArgumentException -android.renderscript.RSInvalidStateException -android.renderscript.RSRuntimeException -android.renderscript.RSSurfaceView -android.renderscript.RenderScript -android.renderscript.RenderScript.Priority -android.renderscript.RenderScript.RSErrorHandler -android.renderscript.RenderScript.RSMessageHandler -android.renderscript.RenderScriptGL -android.renderscript.RenderScriptGL.SurfaceConfig -android.renderscript.Sampler -android.renderscript.Sampler.Builder -android.renderscript.Sampler.Value -android.renderscript.Script -android.renderscript.Script.Builder -android.renderscript.Script.FieldBase -android.renderscript.ScriptC -android.renderscript.Short2 -android.renderscript.Short3 -android.renderscript.Short4 -android.renderscript.Type -android.renderscript.Type.Builder -android.renderscript.Type.CubemapFace -android.sax -android.sax.Element -android.sax.ElementListener -android.sax.EndElementListener -android.sax.EndTextElementListener -android.sax.RootElement -android.sax.StartElementListener -android.sax.TextElementListener -android.service.wallpaper -android.service.wallpaper.WallpaperService -android.service.wallpaper.WallpaperService.Engine -android.speech -android.speech.RecognitionListener -android.speech.RecognitionService -android.speech.RecognitionService.Callback -android.speech.RecognizerIntent -android.speech.RecognizerResultsIntent -android.speech.SpeechRecognizer -android.speech.tts -android.speech.tts.TextToSpeech -android.speech.tts.TextToSpeech.Engine -android.speech.tts.TextToSpeech.OnInitListener -android.speech.tts.TextToSpeech.OnUtteranceCompletedListener -android.telephony -android.telephony.CellLocation -android.telephony.NeighboringCellInfo -android.telephony.PhoneNumberFormattingTextWatcher -android.telephony.PhoneNumberUtils -android.telephony.PhoneStateListener -android.telephony.ServiceState -android.telephony.SignalStrength -android.telephony.SmsManager -android.telephony.SmsMessage -android.telephony.SmsMessage.MessageClass -android.telephony.SmsMessage.SubmitPdu -android.telephony.TelephonyManager -android.telephony.cdma -android.telephony.cdma.CdmaCellLocation -android.telephony.gsm -android.telephony.gsm.GsmCellLocation -android.telephony.gsm.SmsManager -android.telephony.gsm.SmsMessage -android.telephony.gsm.SmsMessage.MessageClass -android.telephony.gsm.SmsMessage.SubmitPdu -android.test -android.test.ActivityInstrumentationTestCase -android.test.ActivityInstrumentationTestCase2 -android.test.ActivityTestCase -android.test.ActivityUnitTestCase -android.test.AndroidTestCase -android.test.AndroidTestRunner -android.test.ApplicationTestCase -android.test.AssertionFailedError -android.test.ComparisonFailure -android.test.FlakyTest -android.test.InstrumentationTestCase -android.test.InstrumentationTestRunner -android.test.InstrumentationTestSuite -android.test.IsolatedContext -android.test.LoaderTestCase -android.test.MoreAsserts -android.test.PerformanceTestCase -android.test.PerformanceTestCase.Intermediates -android.test.ProviderTestCase -android.test.ProviderTestCase2 -android.test.RenamingDelegatingContext -android.test.ServiceTestCase -android.test.SingleLaunchActivityTestCase -android.test.SyncBaseInstrumentation -android.test.TestSuiteProvider -android.test.TouchUtils -android.test.UiThreadTest -android.test.ViewAsserts -android.test.mock -android.test.mock.MockApplication -android.test.mock.MockContentProvider -android.test.mock.MockContentResolver -android.test.mock.MockContext -android.test.mock.MockCursor -android.test.mock.MockDialogInterface -android.test.mock.MockPackageManager -android.test.mock.MockResources -android.test.suitebuilder -android.test.suitebuilder.TestMethod -android.test.suitebuilder.TestSuiteBuilder -android.test.suitebuilder.TestSuiteBuilder.FailedToCreateTests -android.test.suitebuilder.annotation -android.test.suitebuilder.annotation.LargeTest -android.test.suitebuilder.annotation.MediumTest -android.test.suitebuilder.annotation.SmallTest -android.test.suitebuilder.annotation.Smoke -android.test.suitebuilder.annotation.Suppress -android.text -android.text.AlteredCharSequence -android.text.AndroidCharacter -android.text.Annotation -android.text.AutoText -android.text.BoringLayout -android.text.BoringLayout.Metrics -android.text.ClipboardManager -android.text.DynamicLayout -android.text.Editable -android.text.Editable.Factory -android.text.GetChars -android.text.Html -android.text.Html.ImageGetter -android.text.Html.TagHandler -android.text.InputFilter -android.text.InputFilter.AllCaps -android.text.InputFilter.LengthFilter -android.text.InputType -android.text.Layout -android.text.Layout.Alignment -android.text.Layout.Directions -android.text.LoginFilter -android.text.LoginFilter.PasswordFilterGMail -android.text.LoginFilter.UsernameFilterGMail -android.text.LoginFilter.UsernameFilterGeneric -android.text.NoCopySpan -android.text.NoCopySpan.Concrete -android.text.ParcelableSpan -android.text.Selection -android.text.SpanWatcher -android.text.Spannable -android.text.Spannable.Factory -android.text.SpannableString -android.text.SpannableStringBuilder -android.text.Spanned -android.text.SpannedString -android.text.StaticLayout -android.text.TextPaint -android.text.TextUtils -android.text.TextUtils.EllipsizeCallback -android.text.TextUtils.SimpleStringSplitter -android.text.TextUtils.StringSplitter -android.text.TextUtils.TruncateAt -android.text.TextWatcher -android.text.format -android.text.format.DateFormat -android.text.format.DateUtils -android.text.format.Formatter -android.text.format.Time -android.text.method -android.text.method.ArrowKeyMovementMethod -android.text.method.BaseKeyListener -android.text.method.BaseMovementMethod -android.text.method.CharacterPickerDialog -android.text.method.DateKeyListener -android.text.method.DateTimeKeyListener -android.text.method.DialerKeyListener -android.text.method.DigitsKeyListener -android.text.method.HideReturnsTransformationMethod -android.text.method.KeyListener -android.text.method.LinkMovementMethod -android.text.method.MetaKeyKeyListener -android.text.method.MovementMethod -android.text.method.MultiTapKeyListener -android.text.method.NumberKeyListener -android.text.method.PasswordTransformationMethod -android.text.method.QwertyKeyListener -android.text.method.ReplacementTransformationMethod -android.text.method.ScrollingMovementMethod -android.text.method.SingleLineTransformationMethod -android.text.method.TextKeyListener -android.text.method.TextKeyListener.Capitalize -android.text.method.TimeKeyListener -android.text.method.Touch -android.text.method.TransformationMethod -android.text.style -android.text.style.AbsoluteSizeSpan -android.text.style.AlignmentSpan -android.text.style.AlignmentSpan.Standard -android.text.style.BackgroundColorSpan -android.text.style.BulletSpan -android.text.style.CharacterStyle -android.text.style.ClickableSpan -android.text.style.DrawableMarginSpan -android.text.style.DynamicDrawableSpan -android.text.style.ForegroundColorSpan -android.text.style.IconMarginSpan -android.text.style.ImageSpan -android.text.style.LeadingMarginSpan -android.text.style.LeadingMarginSpan.LeadingMarginSpan2 -android.text.style.LeadingMarginSpan.Standard -android.text.style.LineBackgroundSpan -android.text.style.LineHeightSpan -android.text.style.LineHeightSpan.WithDensity -android.text.style.MaskFilterSpan -android.text.style.MetricAffectingSpan -android.text.style.ParagraphStyle -android.text.style.QuoteSpan -android.text.style.RasterizerSpan -android.text.style.RelativeSizeSpan -android.text.style.ReplacementSpan -android.text.style.ScaleXSpan -android.text.style.StrikethroughSpan -android.text.style.StyleSpan -android.text.style.SubscriptSpan -android.text.style.SuperscriptSpan -android.text.style.TabStopSpan -android.text.style.TabStopSpan.Standard -android.text.style.TextAppearanceSpan -android.text.style.TypefaceSpan -android.text.style.URLSpan -android.text.style.UnderlineSpan -android.text.style.UpdateAppearance -android.text.style.UpdateLayout -android.text.style.WrapTogetherSpan -android.text.util -android.text.util.Linkify -android.text.util.Linkify.MatchFilter -android.text.util.Linkify.TransformFilter -android.text.util.Rfc822Token -android.text.util.Rfc822Tokenizer -android.util -android.util.AndroidException -android.util.AndroidRuntimeException -android.util.AttributeSet -android.util.Base64 -android.util.Base64DataException -android.util.Base64InputStream -android.util.Base64OutputStream -android.util.Config -android.util.DebugUtils -android.util.DisplayMetrics -android.util.EventLog -android.util.EventLog.Event -android.util.EventLogTags -android.util.EventLogTags.Description -android.util.FloatMath -android.util.JsonReader -android.util.JsonToken -android.util.JsonWriter -android.util.Log -android.util.LogPrinter -android.util.LruCache -android.util.MalformedJsonException -android.util.MonthDisplayHelper -android.util.Pair -android.util.Patterns -android.util.PrintStreamPrinter -android.util.PrintWriterPrinter -android.util.Printer -android.util.SparseArray -android.util.SparseBooleanArray -android.util.SparseIntArray -android.util.StateSet -android.util.StringBuilderPrinter -android.util.TimeFormatException -android.util.TimeUtils -android.util.TimingLogger -android.util.TypedValue -android.util.Xml -android.util.Xml.Encoding -android.view -android.view.AbsSavedState -android.view.ActionMode -android.view.ActionMode.Callback -android.view.ContextMenu -android.view.ContextMenu.ContextMenuInfo -android.view.ContextThemeWrapper -android.view.Display -android.view.DragEvent -android.view.FocusFinder -android.view.GestureDetector -android.view.GestureDetector.OnDoubleTapListener -android.view.GestureDetector.OnGestureListener -android.view.GestureDetector.SimpleOnGestureListener -android.view.Gravity -android.view.HapticFeedbackConstants -android.view.InflateException -android.view.InputDevice -android.view.InputDevice.MotionRange -android.view.InputEvent -android.view.InputQueue -android.view.InputQueue.Callback -android.view.KeyCharacterMap -android.view.KeyCharacterMap.KeyData -android.view.KeyCharacterMap.UnavailableException -android.view.KeyEvent -android.view.KeyEvent.Callback -android.view.KeyEvent.DispatcherState -android.view.LayoutInflater -android.view.LayoutInflater.Factory -android.view.LayoutInflater.Factory2 -android.view.LayoutInflater.Filter -android.view.Menu -android.view.MenuInflater -android.view.MenuItem -android.view.MenuItem.OnMenuItemClickListener -android.view.MotionEvent -android.view.MotionEvent.PointerCoords -android.view.OrientationEventListener -android.view.OrientationListener -android.view.ScaleGestureDetector -android.view.ScaleGestureDetector.OnScaleGestureListener -android.view.ScaleGestureDetector.SimpleOnScaleGestureListener -android.view.SoundEffectConstants -android.view.SubMenu -android.view.Surface -android.view.Surface.OutOfResourcesException -android.view.SurfaceHolder -android.view.SurfaceHolder.BadSurfaceTypeException -android.view.SurfaceHolder.Callback -android.view.SurfaceHolder.Callback2 -android.view.SurfaceView -android.view.TouchDelegate -android.view.VelocityTracker -android.view.View -android.view.View.BaseSavedState -android.view.View.DragShadowBuilder -android.view.View.MeasureSpec -android.view.View.OnAttachStateChangeListener -android.view.View.OnClickListener -android.view.View.OnCreateContextMenuListener -android.view.View.OnDragListener -android.view.View.OnFocusChangeListener -android.view.View.OnGenericMotionListener -android.view.View.OnKeyListener -android.view.View.OnLayoutChangeListener -android.view.View.OnLongClickListener -android.view.View.OnSystemUiVisibilityChangeListener -android.view.View.OnTouchListener -android.view.ViewConfiguration -android.view.ViewDebug -android.view.ViewDebug.CapturedViewProperty -android.view.ViewDebug.ExportedProperty -android.view.ViewDebug.FlagToString -android.view.ViewDebug.HierarchyTraceType -android.view.ViewDebug.IntToString -android.view.ViewDebug.RecyclerTraceType -android.view.ViewGroup -android.view.ViewGroup.LayoutParams -android.view.ViewGroup.MarginLayoutParams -android.view.ViewGroup.OnHierarchyChangeListener -android.view.ViewManager -android.view.ViewParent -android.view.ViewPropertyAnimator -android.view.ViewStub -android.view.ViewStub.OnInflateListener -android.view.ViewTreeObserver -android.view.ViewTreeObserver.OnGlobalFocusChangeListener -android.view.ViewTreeObserver.OnGlobalLayoutListener -android.view.ViewTreeObserver.OnPreDrawListener -android.view.ViewTreeObserver.OnScrollChangedListener -android.view.ViewTreeObserver.OnTouchModeChangeListener -android.view.Window -android.view.Window.Callback -android.view.WindowManager -android.view.WindowManager.BadTokenException -android.view.WindowManager.LayoutParams -android.view.accessibility -android.view.accessibility.AccessibilityEvent -android.view.accessibility.AccessibilityEventSource -android.view.accessibility.AccessibilityManager -android.view.animation -android.view.animation.AccelerateDecelerateInterpolator -android.view.animation.AccelerateInterpolator -android.view.animation.AlphaAnimation -android.view.animation.Animation -android.view.animation.Animation.AnimationListener -android.view.animation.Animation.Description -android.view.animation.AnimationSet -android.view.animation.AnimationUtils -android.view.animation.AnticipateInterpolator -android.view.animation.AnticipateOvershootInterpolator -android.view.animation.BounceInterpolator -android.view.animation.CycleInterpolator -android.view.animation.DecelerateInterpolator -android.view.animation.GridLayoutAnimationController -android.view.animation.GridLayoutAnimationController.AnimationParameters -android.view.animation.Interpolator -android.view.animation.LayoutAnimationController -android.view.animation.LayoutAnimationController.AnimationParameters -android.view.animation.LinearInterpolator -android.view.animation.OvershootInterpolator -android.view.animation.RotateAnimation -android.view.animation.ScaleAnimation -android.view.animation.Transformation -android.view.animation.TranslateAnimation -android.view.inputmethod -android.view.inputmethod.BaseInputConnection -android.view.inputmethod.CompletionInfo -android.view.inputmethod.CorrectionInfo -android.view.inputmethod.EditorInfo -android.view.inputmethod.ExtractedText -android.view.inputmethod.ExtractedTextRequest -android.view.inputmethod.InputBinding -android.view.inputmethod.InputConnection -android.view.inputmethod.InputConnectionWrapper -android.view.inputmethod.InputMethod -android.view.inputmethod.InputMethod.SessionCallback -android.view.inputmethod.InputMethodInfo -android.view.inputmethod.InputMethodManager -android.view.inputmethod.InputMethodSession -android.view.inputmethod.InputMethodSession.EventCallback -android.view.inputmethod.InputMethodSubtype -android.webkit -android.webkit.CacheManager -android.webkit.CacheManager.CacheResult -android.webkit.ConsoleMessage -android.webkit.ConsoleMessage.MessageLevel -android.webkit.CookieManager -android.webkit.CookieSyncManager -android.webkit.DateSorter -android.webkit.DownloadListener -android.webkit.GeolocationPermissions -android.webkit.GeolocationPermissions.Callback -android.webkit.HttpAuthHandler -android.webkit.JsPromptResult -android.webkit.JsResult -android.webkit.MimeTypeMap -android.webkit.PluginStub -android.webkit.SslErrorHandler -android.webkit.URLUtil -android.webkit.ValueCallback -android.webkit.WebBackForwardList -android.webkit.WebChromeClient -android.webkit.WebChromeClient.CustomViewCallback -android.webkit.WebHistoryItem -android.webkit.WebIconDatabase -android.webkit.WebIconDatabase.IconListener -android.webkit.WebResourceResponse -android.webkit.WebSettings -android.webkit.WebSettings.LayoutAlgorithm -android.webkit.WebSettings.PluginState -android.webkit.WebSettings.RenderPriority -android.webkit.WebSettings.TextSize -android.webkit.WebSettings.ZoomDensity -android.webkit.WebStorage -android.webkit.WebStorage.Origin -android.webkit.WebStorage.QuotaUpdater -android.webkit.WebView -android.webkit.WebView.HitTestResult -android.webkit.WebView.PictureListener -android.webkit.WebView.WebViewTransport -android.webkit.WebViewClient -android.webkit.WebViewDatabase -android.webkit.WebViewFragment -android.widget -android.widget.AbsListView -android.widget.AbsListView.LayoutParams -android.widget.AbsListView.MultiChoiceModeListener -android.widget.AbsListView.OnScrollListener -android.widget.AbsListView.RecyclerListener -android.widget.AbsListView.SelectionBoundsAdjuster -android.widget.AbsSeekBar -android.widget.AbsSpinner -android.widget.AbsoluteLayout -android.widget.AbsoluteLayout.LayoutParams -android.widget.Adapter -android.widget.AdapterView -android.widget.AdapterView.AdapterContextMenuInfo -android.widget.AdapterView.OnItemClickListener -android.widget.AdapterView.OnItemLongClickListener -android.widget.AdapterView.OnItemSelectedListener -android.widget.AdapterViewAnimator -android.widget.AdapterViewFlipper -android.widget.AlphabetIndexer -android.widget.AnalogClock -android.widget.ArrayAdapter -android.widget.AutoCompleteTextView -android.widget.AutoCompleteTextView.Validator -android.widget.BaseAdapter -android.widget.BaseExpandableListAdapter -android.widget.Button -android.widget.CalendarView -android.widget.CalendarView.OnDateChangeListener -android.widget.CheckBox -android.widget.Checkable -android.widget.CheckedTextView -android.widget.Chronometer -android.widget.Chronometer.OnChronometerTickListener -android.widget.CompoundButton -android.widget.CompoundButton.OnCheckedChangeListener -android.widget.CursorAdapter -android.widget.CursorTreeAdapter -android.widget.DatePicker -android.widget.DatePicker.OnDateChangedListener -android.widget.DialerFilter -android.widget.DigitalClock -android.widget.EditText -android.widget.ExpandableListAdapter -android.widget.ExpandableListView -android.widget.ExpandableListView.ExpandableListContextMenuInfo -android.widget.ExpandableListView.OnChildClickListener -android.widget.ExpandableListView.OnGroupClickListener -android.widget.ExpandableListView.OnGroupCollapseListener -android.widget.ExpandableListView.OnGroupExpandListener -android.widget.Filter -android.widget.Filter.FilterListener -android.widget.Filter.FilterResults -android.widget.FilterQueryProvider -android.widget.Filterable -android.widget.FrameLayout -android.widget.FrameLayout.LayoutParams -android.widget.Gallery -android.widget.Gallery.LayoutParams -android.widget.GridView -android.widget.HeaderViewListAdapter -android.widget.HeterogeneousExpandableList -android.widget.HorizontalScrollView -android.widget.ImageButton -android.widget.ImageSwitcher -android.widget.ImageView -android.widget.ImageView.ScaleType -android.widget.LinearLayout -android.widget.LinearLayout.LayoutParams -android.widget.ListAdapter -android.widget.ListPopupWindow -android.widget.ListView -android.widget.ListView.FixedViewInfo -android.widget.MediaController -android.widget.MediaController.MediaPlayerControl -android.widget.MultiAutoCompleteTextView -android.widget.MultiAutoCompleteTextView.CommaTokenizer -android.widget.MultiAutoCompleteTextView.Tokenizer -android.widget.NumberPicker -android.widget.NumberPicker.Formatter -android.widget.NumberPicker.OnScrollListener -android.widget.NumberPicker.OnValueChangeListener -android.widget.OverScroller -android.widget.PopupMenu -android.widget.PopupMenu.OnMenuItemClickListener -android.widget.PopupWindow -android.widget.PopupWindow.OnDismissListener -android.widget.ProgressBar -android.widget.QuickContactBadge -android.widget.RadioButton -android.widget.RadioGroup -android.widget.RadioGroup.LayoutParams -android.widget.RadioGroup.OnCheckedChangeListener -android.widget.RatingBar -android.widget.RatingBar.OnRatingBarChangeListener -android.widget.RelativeLayout -android.widget.RelativeLayout.LayoutParams -android.widget.RemoteViews -android.widget.RemoteViews.ActionException -android.widget.RemoteViews.RemoteView -android.widget.RemoteViewsService -android.widget.RemoteViewsService.RemoteViewsFactory -android.widget.ResourceCursorAdapter -android.widget.ResourceCursorTreeAdapter -android.widget.ScrollView -android.widget.Scroller -android.widget.SearchView -android.widget.SearchView.OnCloseListener -android.widget.SearchView.OnQueryTextListener -android.widget.SearchView.OnSuggestionListener -android.widget.SectionIndexer -android.widget.SeekBar -android.widget.SeekBar.OnSeekBarChangeListener -android.widget.SimpleAdapter -android.widget.SimpleAdapter.ViewBinder -android.widget.SimpleCursorAdapter -android.widget.SimpleCursorAdapter.CursorToStringConverter -android.widget.SimpleCursorAdapter.ViewBinder -android.widget.SimpleCursorTreeAdapter -android.widget.SimpleCursorTreeAdapter.ViewBinder -android.widget.SimpleExpandableListAdapter -android.widget.SlidingDrawer -android.widget.SlidingDrawer.OnDrawerCloseListener -android.widget.SlidingDrawer.OnDrawerOpenListener -android.widget.SlidingDrawer.OnDrawerScrollListener -android.widget.Spinner -android.widget.SpinnerAdapter -android.widget.StackView -android.widget.TabHost -android.widget.TabHost.OnTabChangeListener -android.widget.TabHost.TabContentFactory -android.widget.TabHost.TabSpec -android.widget.TabWidget -android.widget.TableLayout -android.widget.TableLayout.LayoutParams -android.widget.TableRow -android.widget.TableRow.LayoutParams -android.widget.TextSwitcher -android.widget.TextView -android.widget.TextView.BufferType -android.widget.TextView.OnEditorActionListener -android.widget.TextView.SavedState -android.widget.TimePicker -android.widget.TimePicker.OnTimeChangedListener -android.widget.Toast -android.widget.ToggleButton -android.widget.TwoLineListItem -android.widget.VideoView -android.widget.ViewAnimator -android.widget.ViewFlipper -android.widget.ViewSwitcher -android.widget.ViewSwitcher.ViewFactory -android.widget.WrapperListAdapter -android.widget.ZoomButton -android.widget.ZoomButtonsController -android.widget.ZoomButtonsController.OnZoomListener -android.widget.ZoomControls -dalvik.annotation -dalvik.annotation.TestTarget -dalvik.annotation.TestTargetClass -dalvik.bytecode -dalvik.bytecode.OpcodeInfo -dalvik.bytecode.Opcodes -dalvik.system -dalvik.system.DexClassLoader -dalvik.system.DexFile -dalvik.system.PathClassLoader -java.awt.font -java.awt.font.NumericShaper -java.awt.font.TextAttribute -java.beans -java.beans.IndexedPropertyChangeEvent -java.beans.PropertyChangeEvent -java.beans.PropertyChangeListener -java.beans.PropertyChangeListenerProxy -java.beans.PropertyChangeSupport -java.io -java.io.BufferedInputStream -java.io.BufferedOutputStream -java.io.BufferedReader -java.io.BufferedWriter -java.io.ByteArrayInputStream -java.io.ByteArrayOutputStream -java.io.CharArrayReader -java.io.CharArrayWriter -java.io.CharConversionException -java.io.Closeable -java.io.Console -java.io.DataInput -java.io.DataInputStream -java.io.DataOutput -java.io.DataOutputStream -java.io.EOFException -java.io.Externalizable -java.io.File -java.io.FileDescriptor -java.io.FileFilter -java.io.FileInputStream -java.io.FileNotFoundException -java.io.FileOutputStream -java.io.FilePermission -java.io.FileReader -java.io.FileWriter -java.io.FilenameFilter -java.io.FilterInputStream -java.io.FilterOutputStream -java.io.FilterReader -java.io.FilterWriter -java.io.Flushable -java.io.IOError -java.io.IOException -java.io.InputStream -java.io.InputStreamReader -java.io.InterruptedIOException -java.io.InvalidClassException -java.io.InvalidObjectException -java.io.LineNumberInputStream -java.io.LineNumberReader -java.io.NotActiveException -java.io.NotSerializableException -java.io.ObjectInput -java.io.ObjectInputStream -java.io.ObjectInputStream.GetField -java.io.ObjectInputValidation -java.io.ObjectOutput -java.io.ObjectOutputStream -java.io.ObjectOutputStream.PutField -java.io.ObjectStreamClass -java.io.ObjectStreamConstants -java.io.ObjectStreamException -java.io.ObjectStreamField -java.io.OptionalDataException -java.io.OutputStream -java.io.OutputStreamWriter -java.io.PipedInputStream -java.io.PipedOutputStream -java.io.PipedReader -java.io.PipedWriter -java.io.PrintStream -java.io.PrintWriter -java.io.PushbackInputStream -java.io.PushbackReader -java.io.RandomAccessFile -java.io.Reader -java.io.SequenceInputStream -java.io.Serializable -java.io.SerializablePermission -java.io.StreamCorruptedException -java.io.StreamTokenizer -java.io.StringBufferInputStream -java.io.StringReader -java.io.StringWriter -java.io.SyncFailedException -java.io.UTFDataFormatException -java.io.UnsupportedEncodingException -java.io.WriteAbortedException -java.io.Writer -java.lang -java.lang.AbstractMethodError -java.lang.Appendable -java.lang.ArithmeticException -java.lang.ArrayIndexOutOfBoundsException -java.lang.ArrayStoreException -java.lang.AssertionError -java.lang.Boolean -java.lang.Byte -java.lang.CharSequence -java.lang.Character -java.lang.Character.Subset -java.lang.Character.UnicodeBlock -java.lang.Class -java.lang.ClassCastException -java.lang.ClassCircularityError -java.lang.ClassFormatError -java.lang.ClassLoader -java.lang.ClassNotFoundException -java.lang.CloneNotSupportedException -java.lang.Cloneable -java.lang.Comparable -java.lang.Compiler -java.lang.Deprecated -java.lang.Double -java.lang.Enum -java.lang.EnumConstantNotPresentException -java.lang.Error -java.lang.Exception -java.lang.ExceptionInInitializerError -java.lang.Float -java.lang.IllegalAccessError -java.lang.IllegalAccessException -java.lang.IllegalArgumentException -java.lang.IllegalMonitorStateException -java.lang.IllegalStateException -java.lang.IllegalThreadStateException -java.lang.IncompatibleClassChangeError -java.lang.IndexOutOfBoundsException -java.lang.InheritableThreadLocal -java.lang.InstantiationError -java.lang.InstantiationException -java.lang.Integer -java.lang.InternalError -java.lang.InterruptedException -java.lang.Iterable -java.lang.LinkageError -java.lang.Long -java.lang.Math -java.lang.NegativeArraySizeException -java.lang.NoClassDefFoundError -java.lang.NoSuchFieldError -java.lang.NoSuchFieldException -java.lang.NoSuchMethodError -java.lang.NoSuchMethodException -java.lang.NullPointerException -java.lang.Number -java.lang.NumberFormatException -java.lang.Object -java.lang.OutOfMemoryError -java.lang.Override -java.lang.Package -java.lang.Process -java.lang.ProcessBuilder -java.lang.Readable -java.lang.Runnable -java.lang.Runtime -java.lang.RuntimeException -java.lang.RuntimePermission -java.lang.SecurityException -java.lang.SecurityManager -java.lang.Short -java.lang.StackOverflowError -java.lang.StackTraceElement -java.lang.StrictMath -java.lang.String -java.lang.StringBuffer -java.lang.StringBuilder -java.lang.StringIndexOutOfBoundsException -java.lang.SuppressWarnings -java.lang.System -java.lang.Thread -java.lang.Thread.State -java.lang.Thread.UncaughtExceptionHandler -java.lang.ThreadDeath -java.lang.ThreadGroup -java.lang.ThreadLocal -java.lang.Throwable -java.lang.TypeNotPresentException -java.lang.UnknownError -java.lang.UnsatisfiedLinkError -java.lang.UnsupportedClassVersionError -java.lang.UnsupportedOperationException -java.lang.VerifyError -java.lang.VirtualMachineError -java.lang.Void -java.lang.annotation -java.lang.annotation.Annotation -java.lang.annotation.AnnotationFormatError -java.lang.annotation.AnnotationTypeMismatchException -java.lang.annotation.Documented -java.lang.annotation.ElementType -java.lang.annotation.IncompleteAnnotationException -java.lang.annotation.Inherited -java.lang.annotation.Retention -java.lang.annotation.RetentionPolicy -java.lang.annotation.Target -java.lang.ref -java.lang.ref.PhantomReference -java.lang.ref.Reference -java.lang.ref.ReferenceQueue -java.lang.ref.SoftReference -java.lang.ref.WeakReference -java.lang.reflect -java.lang.reflect.AccessibleObject -java.lang.reflect.AnnotatedElement -java.lang.reflect.Array -java.lang.reflect.Constructor -java.lang.reflect.Field -java.lang.reflect.GenericArrayType -java.lang.reflect.GenericDeclaration -java.lang.reflect.GenericSignatureFormatError -java.lang.reflect.InvocationHandler -java.lang.reflect.InvocationTargetException -java.lang.reflect.MalformedParameterizedTypeException -java.lang.reflect.Member -java.lang.reflect.Method -java.lang.reflect.Modifier -java.lang.reflect.ParameterizedType -java.lang.reflect.Proxy -java.lang.reflect.ReflectPermission -java.lang.reflect.Type -java.lang.reflect.TypeVariable -java.lang.reflect.UndeclaredThrowableException -java.lang.reflect.WildcardType -java.math -java.math.BigDecimal -java.math.BigInteger -java.math.MathContext -java.math.RoundingMode -java.net -java.net.Authenticator -java.net.Authenticator.RequestorType -java.net.BindException -java.net.CacheRequest -java.net.CacheResponse -java.net.ConnectException -java.net.ContentHandler -java.net.ContentHandlerFactory -java.net.CookieHandler -java.net.CookieManager -java.net.CookiePolicy -java.net.CookieStore -java.net.DatagramPacket -java.net.DatagramSocket -java.net.DatagramSocketImpl -java.net.DatagramSocketImplFactory -java.net.FileNameMap -java.net.HttpCookie -java.net.HttpRetryException -java.net.HttpURLConnection -java.net.IDN -java.net.Inet4Address -java.net.Inet6Address -java.net.InetAddress -java.net.InetSocketAddress -java.net.InterfaceAddress -java.net.JarURLConnection -java.net.MalformedURLException -java.net.MulticastSocket -java.net.NetPermission -java.net.NetworkInterface -java.net.NoRouteToHostException -java.net.PasswordAuthentication -java.net.PortUnreachableException -java.net.ProtocolException -java.net.Proxy -java.net.Proxy.Type -java.net.ProxySelector -java.net.ResponseCache -java.net.SecureCacheResponse -java.net.ServerSocket -java.net.Socket -java.net.SocketAddress -java.net.SocketException -java.net.SocketImpl -java.net.SocketImplFactory -java.net.SocketOptions -java.net.SocketPermission -java.net.SocketTimeoutException -java.net.URI -java.net.URISyntaxException -java.net.URL -java.net.URLClassLoader -java.net.URLConnection -java.net.URLDecoder -java.net.URLEncoder -java.net.URLStreamHandler -java.net.URLStreamHandlerFactory -java.net.UnknownHostException -java.net.UnknownServiceException -java.nio -java.nio.Buffer -java.nio.BufferOverflowException -java.nio.BufferUnderflowException -java.nio.ByteBuffer -java.nio.ByteOrder -java.nio.CharBuffer -java.nio.DoubleBuffer -java.nio.FloatBuffer -java.nio.IntBuffer -java.nio.InvalidMarkException -java.nio.LongBuffer -java.nio.MappedByteBuffer -java.nio.ReadOnlyBufferException -java.nio.ShortBuffer -java.nio.channels -java.nio.channels.AlreadyConnectedException -java.nio.channels.AsynchronousCloseException -java.nio.channels.ByteChannel -java.nio.channels.CancelledKeyException -java.nio.channels.Channel -java.nio.channels.Channels -java.nio.channels.ClosedByInterruptException -java.nio.channels.ClosedChannelException -java.nio.channels.ClosedSelectorException -java.nio.channels.ConnectionPendingException -java.nio.channels.DatagramChannel -java.nio.channels.FileChannel -java.nio.channels.FileChannel.MapMode -java.nio.channels.FileLock -java.nio.channels.FileLockInterruptionException -java.nio.channels.GatheringByteChannel -java.nio.channels.IllegalBlockingModeException -java.nio.channels.IllegalSelectorException -java.nio.channels.InterruptibleChannel -java.nio.channels.NoConnectionPendingException -java.nio.channels.NonReadableChannelException -java.nio.channels.NonWritableChannelException -java.nio.channels.NotYetBoundException -java.nio.channels.NotYetConnectedException -java.nio.channels.OverlappingFileLockException -java.nio.channels.Pipe -java.nio.channels.Pipe.SinkChannel -java.nio.channels.Pipe.SourceChannel -java.nio.channels.ReadableByteChannel -java.nio.channels.ScatteringByteChannel -java.nio.channels.SelectableChannel -java.nio.channels.SelectionKey -java.nio.channels.Selector -java.nio.channels.ServerSocketChannel -java.nio.channels.SocketChannel -java.nio.channels.UnresolvedAddressException -java.nio.channels.UnsupportedAddressTypeException -java.nio.channels.WritableByteChannel -java.nio.channels.spi -java.nio.channels.spi.AbstractInterruptibleChannel -java.nio.channels.spi.AbstractSelectableChannel -java.nio.channels.spi.AbstractSelectionKey -java.nio.channels.spi.AbstractSelector -java.nio.channels.spi.SelectorProvider -java.nio.charset -java.nio.charset.CharacterCodingException -java.nio.charset.Charset -java.nio.charset.CharsetDecoder -java.nio.charset.CharsetEncoder -java.nio.charset.CoderMalfunctionError -java.nio.charset.CoderResult -java.nio.charset.CodingErrorAction -java.nio.charset.IllegalCharsetNameException -java.nio.charset.MalformedInputException -java.nio.charset.UnmappableCharacterException -java.nio.charset.UnsupportedCharsetException -java.nio.charset.spi -java.nio.charset.spi.CharsetProvider -java.security -java.security.AccessControlContext -java.security.AccessControlException -java.security.AccessController -java.security.AlgorithmParameterGenerator -java.security.AlgorithmParameterGeneratorSpi -java.security.AlgorithmParameters -java.security.AlgorithmParametersSpi -java.security.AllPermission -java.security.AuthProvider -java.security.BasicPermission -java.security.Certificate -java.security.CodeSigner -java.security.CodeSource -java.security.DigestException -java.security.DigestInputStream -java.security.DigestOutputStream -java.security.DomainCombiner -java.security.GeneralSecurityException -java.security.Guard -java.security.GuardedObject -java.security.Identity -java.security.IdentityScope -java.security.InvalidAlgorithmParameterException -java.security.InvalidKeyException -java.security.InvalidParameterException -java.security.Key -java.security.KeyException -java.security.KeyFactory -java.security.KeyFactorySpi -java.security.KeyManagementException -java.security.KeyPair -java.security.KeyPairGenerator -java.security.KeyPairGeneratorSpi -java.security.KeyRep -java.security.KeyRep.Type -java.security.KeyStore -java.security.KeyStore.Builder -java.security.KeyStore.CallbackHandlerProtection -java.security.KeyStore.Entry -java.security.KeyStore.LoadStoreParameter -java.security.KeyStore.PasswordProtection -java.security.KeyStore.PrivateKeyEntry -java.security.KeyStore.ProtectionParameter -java.security.KeyStore.SecretKeyEntry -java.security.KeyStore.TrustedCertificateEntry -java.security.KeyStoreException -java.security.KeyStoreSpi -java.security.MessageDigest -java.security.MessageDigestSpi -java.security.NoSuchAlgorithmException -java.security.NoSuchProviderException -java.security.Permission -java.security.PermissionCollection -java.security.Permissions -java.security.Policy -java.security.Policy.Parameters -java.security.PolicySpi -java.security.Principal -java.security.PrivateKey -java.security.PrivilegedAction -java.security.PrivilegedActionException -java.security.PrivilegedExceptionAction -java.security.ProtectionDomain -java.security.Provider -java.security.Provider.Service -java.security.ProviderException -java.security.PublicKey -java.security.SecureClassLoader -java.security.SecureRandom -java.security.SecureRandomSpi -java.security.Security -java.security.SecurityPermission -java.security.Signature -java.security.SignatureException -java.security.SignatureSpi -java.security.SignedObject -java.security.Signer -java.security.Timestamp -java.security.UnrecoverableEntryException -java.security.UnrecoverableKeyException -java.security.UnresolvedPermission -java.security.acl -java.security.acl.Acl -java.security.acl.AclEntry -java.security.acl.AclNotFoundException -java.security.acl.Group -java.security.acl.LastOwnerException -java.security.acl.NotOwnerException -java.security.acl.Owner -java.security.acl.Permission -java.security.cert -java.security.cert.CRL -java.security.cert.CRLException -java.security.cert.CRLSelector -java.security.cert.CertPath -java.security.cert.CertPath.CertPathRep -java.security.cert.CertPathBuilder -java.security.cert.CertPathBuilderException -java.security.cert.CertPathBuilderResult -java.security.cert.CertPathBuilderSpi -java.security.cert.CertPathParameters -java.security.cert.CertPathValidator -java.security.cert.CertPathValidatorException -java.security.cert.CertPathValidatorResult -java.security.cert.CertPathValidatorSpi -java.security.cert.CertSelector -java.security.cert.CertStore -java.security.cert.CertStoreException -java.security.cert.CertStoreParameters -java.security.cert.CertStoreSpi -java.security.cert.Certificate -java.security.cert.Certificate.CertificateRep -java.security.cert.CertificateEncodingException -java.security.cert.CertificateException -java.security.cert.CertificateExpiredException -java.security.cert.CertificateFactory -java.security.cert.CertificateFactorySpi -java.security.cert.CertificateNotYetValidException -java.security.cert.CertificateParsingException -java.security.cert.CollectionCertStoreParameters -java.security.cert.LDAPCertStoreParameters -java.security.cert.PKIXBuilderParameters -java.security.cert.PKIXCertPathBuilderResult -java.security.cert.PKIXCertPathChecker -java.security.cert.PKIXCertPathValidatorResult -java.security.cert.PKIXParameters -java.security.cert.PolicyNode -java.security.cert.PolicyQualifierInfo -java.security.cert.TrustAnchor -java.security.cert.X509CRL -java.security.cert.X509CRLEntry -java.security.cert.X509CRLSelector -java.security.cert.X509CertSelector -java.security.cert.X509Certificate -java.security.cert.X509Extension -java.security.interfaces -java.security.interfaces.DSAKey -java.security.interfaces.DSAKeyPairGenerator -java.security.interfaces.DSAParams -java.security.interfaces.DSAPrivateKey -java.security.interfaces.DSAPublicKey -java.security.interfaces.ECKey -java.security.interfaces.ECPrivateKey -java.security.interfaces.ECPublicKey -java.security.interfaces.RSAKey -java.security.interfaces.RSAMultiPrimePrivateCrtKey -java.security.interfaces.RSAPrivateCrtKey -java.security.interfaces.RSAPrivateKey -java.security.interfaces.RSAPublicKey -java.security.spec -java.security.spec.AlgorithmParameterSpec -java.security.spec.DSAParameterSpec -java.security.spec.DSAPrivateKeySpec -java.security.spec.DSAPublicKeySpec -java.security.spec.ECField -java.security.spec.ECFieldF2m -java.security.spec.ECFieldFp -java.security.spec.ECGenParameterSpec -java.security.spec.ECParameterSpec -java.security.spec.ECPoint -java.security.spec.ECPrivateKeySpec -java.security.spec.ECPublicKeySpec -java.security.spec.EllipticCurve -java.security.spec.EncodedKeySpec -java.security.spec.InvalidKeySpecException -java.security.spec.InvalidParameterSpecException -java.security.spec.KeySpec -java.security.spec.MGF1ParameterSpec -java.security.spec.PKCS8EncodedKeySpec -java.security.spec.PSSParameterSpec -java.security.spec.RSAKeyGenParameterSpec -java.security.spec.RSAMultiPrimePrivateCrtKeySpec -java.security.spec.RSAOtherPrimeInfo -java.security.spec.RSAPrivateCrtKeySpec -java.security.spec.RSAPrivateKeySpec -java.security.spec.RSAPublicKeySpec -java.security.spec.X509EncodedKeySpec -java.sql -java.sql.Array -java.sql.BatchUpdateException -java.sql.Blob -java.sql.CallableStatement -java.sql.ClientInfoStatus -java.sql.Clob -java.sql.Connection -java.sql.DataTruncation -java.sql.DatabaseMetaData -java.sql.Date -java.sql.Driver -java.sql.DriverManager -java.sql.DriverPropertyInfo -java.sql.NClob -java.sql.ParameterMetaData -java.sql.PreparedStatement -java.sql.Ref -java.sql.ResultSet -java.sql.ResultSetMetaData -java.sql.RowId -java.sql.RowIdLifetime -java.sql.SQLClientInfoException -java.sql.SQLData -java.sql.SQLDataException -java.sql.SQLException -java.sql.SQLFeatureNotSupportedException -java.sql.SQLInput -java.sql.SQLIntegrityConstraintViolationException -java.sql.SQLInvalidAuthorizationSpecException -java.sql.SQLNonTransientConnectionException -java.sql.SQLNonTransientException -java.sql.SQLOutput -java.sql.SQLPermission -java.sql.SQLRecoverableException -java.sql.SQLSyntaxErrorException -java.sql.SQLTimeoutException -java.sql.SQLTransactionRollbackException -java.sql.SQLTransientConnectionException -java.sql.SQLTransientException -java.sql.SQLWarning -java.sql.SQLXML -java.sql.Savepoint -java.sql.Statement -java.sql.Struct -java.sql.Time -java.sql.Timestamp -java.sql.Types -java.sql.Wrapper -java.text -java.text.Annotation -java.text.AttributedCharacterIterator -java.text.AttributedCharacterIterator.Attribute -java.text.AttributedString -java.text.Bidi -java.text.BreakIterator -java.text.CharacterIterator -java.text.ChoiceFormat -java.text.CollationElementIterator -java.text.CollationKey -java.text.Collator -java.text.DateFormat -java.text.DateFormat.Field -java.text.DateFormatSymbols -java.text.DecimalFormat -java.text.DecimalFormatSymbols -java.text.FieldPosition -java.text.Format -java.text.Format.Field -java.text.MessageFormat -java.text.MessageFormat.Field -java.text.Normalizer -java.text.Normalizer.Form -java.text.NumberFormat -java.text.NumberFormat.Field -java.text.ParseException -java.text.ParsePosition -java.text.RuleBasedCollator -java.text.SimpleDateFormat -java.text.StringCharacterIterator -java.util -java.util.AbstractCollection -java.util.AbstractList -java.util.AbstractMap -java.util.AbstractMap.SimpleEntry -java.util.AbstractMap.SimpleImmutableEntry -java.util.AbstractQueue -java.util.AbstractSequentialList -java.util.AbstractSet -java.util.ArrayDeque -java.util.ArrayList -java.util.Arrays -java.util.BitSet -java.util.Calendar -java.util.Collection -java.util.Collections -java.util.Comparator -java.util.ConcurrentModificationException -java.util.Currency -java.util.Date -java.util.Deque -java.util.Dictionary -java.util.DuplicateFormatFlagsException -java.util.EmptyStackException -java.util.EnumMap -java.util.EnumSet -java.util.Enumeration -java.util.EventListener -java.util.EventListenerProxy -java.util.EventObject -java.util.FormatFlagsConversionMismatchException -java.util.Formattable -java.util.FormattableFlags -java.util.Formatter -java.util.Formatter.BigDecimalLayoutForm -java.util.FormatterClosedException -java.util.GregorianCalendar -java.util.HashMap -java.util.HashSet -java.util.Hashtable -java.util.IdentityHashMap -java.util.IllegalFormatCodePointException -java.util.IllegalFormatConversionException -java.util.IllegalFormatException -java.util.IllegalFormatFlagsException -java.util.IllegalFormatPrecisionException -java.util.IllegalFormatWidthException -java.util.InputMismatchException -java.util.InvalidPropertiesFormatException -java.util.Iterator -java.util.LinkedHashMap -java.util.LinkedHashSet -java.util.LinkedList -java.util.List -java.util.ListIterator -java.util.ListResourceBundle -java.util.Locale -java.util.Map -java.util.Map.Entry -java.util.MissingFormatArgumentException -java.util.MissingFormatWidthException -java.util.MissingResourceException -java.util.NavigableMap -java.util.NavigableSet -java.util.NoSuchElementException -java.util.Observable -java.util.Observer -java.util.PriorityQueue -java.util.Properties -java.util.PropertyPermission -java.util.PropertyResourceBundle -java.util.Queue -java.util.Random -java.util.RandomAccess -java.util.ResourceBundle -java.util.ResourceBundle.Control -java.util.Scanner -java.util.ServiceConfigurationError -java.util.ServiceLoader -java.util.Set -java.util.SimpleTimeZone -java.util.SortedMap -java.util.SortedSet -java.util.Stack -java.util.StringTokenizer -java.util.TimeZone -java.util.Timer -java.util.TimerTask -java.util.TooManyListenersException -java.util.TreeMap -java.util.TreeSet -java.util.UUID -java.util.UnknownFormatConversionException -java.util.UnknownFormatFlagsException -java.util.Vector -java.util.WeakHashMap -java.util.concurrent -java.util.concurrent.AbstractExecutorService -java.util.concurrent.ArrayBlockingQueue -java.util.concurrent.BlockingDeque -java.util.concurrent.BlockingQueue -java.util.concurrent.BrokenBarrierException -java.util.concurrent.Callable -java.util.concurrent.CancellationException -java.util.concurrent.CompletionService -java.util.concurrent.ConcurrentHashMap -java.util.concurrent.ConcurrentLinkedQueue -java.util.concurrent.ConcurrentMap -java.util.concurrent.ConcurrentNavigableMap -java.util.concurrent.ConcurrentSkipListMap -java.util.concurrent.ConcurrentSkipListSet -java.util.concurrent.CopyOnWriteArrayList -java.util.concurrent.CopyOnWriteArraySet -java.util.concurrent.CountDownLatch -java.util.concurrent.CyclicBarrier -java.util.concurrent.DelayQueue -java.util.concurrent.Delayed -java.util.concurrent.Exchanger -java.util.concurrent.ExecutionException -java.util.concurrent.Executor -java.util.concurrent.ExecutorCompletionService -java.util.concurrent.ExecutorService -java.util.concurrent.Executors -java.util.concurrent.Future -java.util.concurrent.FutureTask -java.util.concurrent.LinkedBlockingDeque -java.util.concurrent.LinkedBlockingQueue -java.util.concurrent.PriorityBlockingQueue -java.util.concurrent.RejectedExecutionException -java.util.concurrent.RejectedExecutionHandler -java.util.concurrent.RunnableFuture -java.util.concurrent.RunnableScheduledFuture -java.util.concurrent.ScheduledExecutorService -java.util.concurrent.ScheduledFuture -java.util.concurrent.ScheduledThreadPoolExecutor -java.util.concurrent.Semaphore -java.util.concurrent.SynchronousQueue -java.util.concurrent.ThreadFactory -java.util.concurrent.ThreadPoolExecutor -java.util.concurrent.ThreadPoolExecutor.AbortPolicy -java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy -java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy -java.util.concurrent.ThreadPoolExecutor.DiscardPolicy -java.util.concurrent.TimeUnit -java.util.concurrent.TimeoutException -java.util.concurrent.atomic -java.util.concurrent.atomic.AtomicBoolean -java.util.concurrent.atomic.AtomicInteger -java.util.concurrent.atomic.AtomicIntegerArray -java.util.concurrent.atomic.AtomicIntegerFieldUpdater -java.util.concurrent.atomic.AtomicLong -java.util.concurrent.atomic.AtomicLongArray -java.util.concurrent.atomic.AtomicLongFieldUpdater -java.util.concurrent.atomic.AtomicMarkableReference -java.util.concurrent.atomic.AtomicReference -java.util.concurrent.atomic.AtomicReferenceArray -java.util.concurrent.atomic.AtomicReferenceFieldUpdater -java.util.concurrent.atomic.AtomicStampedReference -java.util.concurrent.locks -java.util.concurrent.locks.AbstractOwnableSynchronizer -java.util.concurrent.locks.AbstractQueuedLongSynchronizer -java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject -java.util.concurrent.locks.AbstractQueuedSynchronizer -java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject -java.util.concurrent.locks.Condition -java.util.concurrent.locks.Lock -java.util.concurrent.locks.LockSupport -java.util.concurrent.locks.ReadWriteLock -java.util.concurrent.locks.ReentrantLock -java.util.concurrent.locks.ReentrantReadWriteLock -java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock -java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock -java.util.jar -java.util.jar.Attributes -java.util.jar.Attributes.Name -java.util.jar.JarEntry -java.util.jar.JarException -java.util.jar.JarFile -java.util.jar.JarInputStream -java.util.jar.JarOutputStream -java.util.jar.Manifest -java.util.jar.Pack200 -java.util.jar.Pack200.Packer -java.util.jar.Pack200.Unpacker -java.util.logging -java.util.logging.ConsoleHandler -java.util.logging.ErrorManager -java.util.logging.FileHandler -java.util.logging.Filter -java.util.logging.Formatter -java.util.logging.Handler -java.util.logging.Level -java.util.logging.LogManager -java.util.logging.LogRecord -java.util.logging.Logger -java.util.logging.LoggingMXBean -java.util.logging.LoggingPermission -java.util.logging.MemoryHandler -java.util.logging.SimpleFormatter -java.util.logging.SocketHandler -java.util.logging.StreamHandler -java.util.logging.XMLFormatter -java.util.prefs -java.util.prefs.AbstractPreferences -java.util.prefs.BackingStoreException -java.util.prefs.InvalidPreferencesFormatException -java.util.prefs.NodeChangeEvent -java.util.prefs.NodeChangeListener -java.util.prefs.PreferenceChangeEvent -java.util.prefs.PreferenceChangeListener -java.util.prefs.Preferences -java.util.prefs.PreferencesFactory -java.util.regex -java.util.regex.MatchResult -java.util.regex.Matcher -java.util.regex.Pattern -java.util.regex.PatternSyntaxException -java.util.zip -java.util.zip.Adler32 -java.util.zip.CRC32 -java.util.zip.CheckedInputStream -java.util.zip.CheckedOutputStream -java.util.zip.Checksum -java.util.zip.DataFormatException -java.util.zip.Deflater -java.util.zip.DeflaterInputStream -java.util.zip.DeflaterOutputStream -java.util.zip.GZIPInputStream -java.util.zip.GZIPOutputStream -java.util.zip.Inflater -java.util.zip.InflaterInputStream -java.util.zip.InflaterOutputStream -java.util.zip.ZipEntry -java.util.zip.ZipError -java.util.zip.ZipException -java.util.zip.ZipFile -java.util.zip.ZipInputStream -java.util.zip.ZipOutputStream -javax.crypto -javax.crypto.BadPaddingException -javax.crypto.Cipher -javax.crypto.CipherInputStream -javax.crypto.CipherOutputStream -javax.crypto.CipherSpi -javax.crypto.EncryptedPrivateKeyInfo -javax.crypto.ExemptionMechanism -javax.crypto.ExemptionMechanismException -javax.crypto.ExemptionMechanismSpi -javax.crypto.IllegalBlockSizeException -javax.crypto.KeyAgreement -javax.crypto.KeyAgreementSpi -javax.crypto.KeyGenerator -javax.crypto.KeyGeneratorSpi -javax.crypto.Mac -javax.crypto.MacSpi -javax.crypto.NoSuchPaddingException -javax.crypto.NullCipher -javax.crypto.SealedObject -javax.crypto.SecretKey -javax.crypto.SecretKeyFactory -javax.crypto.SecretKeyFactorySpi -javax.crypto.ShortBufferException -javax.crypto.interfaces -javax.crypto.interfaces.DHKey -javax.crypto.interfaces.DHPrivateKey -javax.crypto.interfaces.DHPublicKey -javax.crypto.interfaces.PBEKey -javax.crypto.spec -javax.crypto.spec.DESKeySpec -javax.crypto.spec.DESedeKeySpec -javax.crypto.spec.DHGenParameterSpec -javax.crypto.spec.DHParameterSpec -javax.crypto.spec.DHPrivateKeySpec -javax.crypto.spec.DHPublicKeySpec -javax.crypto.spec.IvParameterSpec -javax.crypto.spec.OAEPParameterSpec -javax.crypto.spec.PBEKeySpec -javax.crypto.spec.PBEParameterSpec -javax.crypto.spec.PSource -javax.crypto.spec.PSource.PSpecified -javax.crypto.spec.RC2ParameterSpec -javax.crypto.spec.RC5ParameterSpec -javax.crypto.spec.SecretKeySpec -javax.microedition.khronos.egl -javax.microedition.khronos.egl.EGL -javax.microedition.khronos.egl.EGL10 -javax.microedition.khronos.egl.EGL11 -javax.microedition.khronos.egl.EGLConfig -javax.microedition.khronos.egl.EGLContext -javax.microedition.khronos.egl.EGLDisplay -javax.microedition.khronos.egl.EGLSurface -javax.microedition.khronos.opengles -javax.microedition.khronos.opengles.GL -javax.microedition.khronos.opengles.GL10 -javax.microedition.khronos.opengles.GL10Ext -javax.microedition.khronos.opengles.GL11 -javax.microedition.khronos.opengles.GL11Ext -javax.microedition.khronos.opengles.GL11ExtensionPack -javax.net -javax.net.ServerSocketFactory -javax.net.SocketFactory -javax.net.ssl -javax.net.ssl.CertPathTrustManagerParameters -javax.net.ssl.HandshakeCompletedEvent -javax.net.ssl.HandshakeCompletedListener -javax.net.ssl.HostnameVerifier -javax.net.ssl.HttpsURLConnection -javax.net.ssl.KeyManager -javax.net.ssl.KeyManagerFactory -javax.net.ssl.KeyManagerFactorySpi -javax.net.ssl.KeyStoreBuilderParameters -javax.net.ssl.ManagerFactoryParameters -javax.net.ssl.SSLContext -javax.net.ssl.SSLContextSpi -javax.net.ssl.SSLEngine -javax.net.ssl.SSLEngineResult -javax.net.ssl.SSLEngineResult.HandshakeStatus -javax.net.ssl.SSLEngineResult.Status -javax.net.ssl.SSLException -javax.net.ssl.SSLHandshakeException -javax.net.ssl.SSLKeyException -javax.net.ssl.SSLParameters -javax.net.ssl.SSLPeerUnverifiedException -javax.net.ssl.SSLPermission -javax.net.ssl.SSLProtocolException -javax.net.ssl.SSLServerSocket -javax.net.ssl.SSLServerSocketFactory -javax.net.ssl.SSLSession -javax.net.ssl.SSLSessionBindingEvent -javax.net.ssl.SSLSessionBindingListener -javax.net.ssl.SSLSessionContext -javax.net.ssl.SSLSocket -javax.net.ssl.SSLSocketFactory -javax.net.ssl.TrustManager -javax.net.ssl.TrustManagerFactory -javax.net.ssl.TrustManagerFactorySpi -javax.net.ssl.X509ExtendedKeyManager -javax.net.ssl.X509KeyManager -javax.net.ssl.X509TrustManager -javax.security.auth -javax.security.auth.AuthPermission -javax.security.auth.DestroyFailedException -javax.security.auth.Destroyable -javax.security.auth.PrivateCredentialPermission -javax.security.auth.Subject -javax.security.auth.SubjectDomainCombiner -javax.security.auth.callback -javax.security.auth.callback.Callback -javax.security.auth.callback.CallbackHandler -javax.security.auth.callback.PasswordCallback -javax.security.auth.callback.UnsupportedCallbackException -javax.security.auth.login -javax.security.auth.login.LoginException -javax.security.auth.x500 -javax.security.auth.x500.X500Principal -javax.security.cert -javax.security.cert.Certificate -javax.security.cert.CertificateEncodingException -javax.security.cert.CertificateException -javax.security.cert.CertificateExpiredException -javax.security.cert.CertificateNotYetValidException -javax.security.cert.CertificateParsingException -javax.security.cert.X509Certificate -javax.sql -javax.sql.CommonDataSource -javax.sql.ConnectionEvent -javax.sql.ConnectionEventListener -javax.sql.ConnectionPoolDataSource -javax.sql.DataSource -javax.sql.PooledConnection -javax.sql.RowSet -javax.sql.RowSetEvent -javax.sql.RowSetInternal -javax.sql.RowSetListener -javax.sql.RowSetMetaData -javax.sql.RowSetReader -javax.sql.RowSetWriter -javax.sql.StatementEvent -javax.sql.StatementEventListener -javax.xml -javax.xml.XMLConstants -javax.xml.datatype -javax.xml.datatype.DatatypeConfigurationException -javax.xml.datatype.DatatypeConstants -javax.xml.datatype.DatatypeConstants.Field -javax.xml.datatype.DatatypeFactory -javax.xml.datatype.Duration -javax.xml.datatype.XMLGregorianCalendar -javax.xml.namespace -javax.xml.namespace.NamespaceContext -javax.xml.namespace.QName -javax.xml.parsers -javax.xml.parsers.DocumentBuilder -javax.xml.parsers.DocumentBuilderFactory -javax.xml.parsers.FactoryConfigurationError -javax.xml.parsers.ParserConfigurationException -javax.xml.parsers.SAXParser -javax.xml.parsers.SAXParserFactory -javax.xml.transform -javax.xml.transform.ErrorListener -javax.xml.transform.OutputKeys -javax.xml.transform.Result -javax.xml.transform.Source -javax.xml.transform.SourceLocator -javax.xml.transform.Templates -javax.xml.transform.Transformer -javax.xml.transform.TransformerConfigurationException -javax.xml.transform.TransformerException -javax.xml.transform.TransformerFactory -javax.xml.transform.TransformerFactoryConfigurationError -javax.xml.transform.URIResolver -javax.xml.transform.dom -javax.xml.transform.dom.DOMLocator -javax.xml.transform.dom.DOMResult -javax.xml.transform.dom.DOMSource -javax.xml.transform.sax -javax.xml.transform.sax.SAXResult -javax.xml.transform.sax.SAXSource -javax.xml.transform.sax.SAXTransformerFactory -javax.xml.transform.sax.TemplatesHandler -javax.xml.transform.sax.TransformerHandler -javax.xml.transform.stream -javax.xml.transform.stream.StreamResult -javax.xml.transform.stream.StreamSource -javax.xml.validation -javax.xml.validation.Schema -javax.xml.validation.SchemaFactory -javax.xml.validation.SchemaFactoryLoader -javax.xml.validation.TypeInfoProvider -javax.xml.validation.Validator -javax.xml.validation.ValidatorHandler -javax.xml.xpath -javax.xml.xpath.XPath -javax.xml.xpath.XPathConstants -javax.xml.xpath.XPathException -javax.xml.xpath.XPathExpression -javax.xml.xpath.XPathExpressionException -javax.xml.xpath.XPathFactory -javax.xml.xpath.XPathFactoryConfigurationException -javax.xml.xpath.XPathFunction -javax.xml.xpath.XPathFunctionException -javax.xml.xpath.XPathFunctionResolver -javax.xml.xpath.XPathVariableResolver -junit.framework -junit.framework.Assert -junit.framework.AssertionFailedError -junit.framework.ComparisonFailure -junit.framework.Protectable -junit.framework.Test -junit.framework.TestCase -junit.framework.TestFailure -junit.framework.TestListener -junit.framework.TestResult -junit.framework.TestSuite -junit.runner -junit.runner.BaseTestRunner -junit.runner.TestSuiteLoader -junit.runner.Version -org.apache.http -org.apache.http.ConnectionClosedException -org.apache.http.ConnectionReuseStrategy -org.apache.http.FormattedHeader -org.apache.http.Header -org.apache.http.HeaderElement -org.apache.http.HeaderElementIterator -org.apache.http.HeaderIterator -org.apache.http.HttpClientConnection -org.apache.http.HttpConnection -org.apache.http.HttpConnectionMetrics -org.apache.http.HttpEntity -org.apache.http.HttpEntityEnclosingRequest -org.apache.http.HttpException -org.apache.http.HttpHost -org.apache.http.HttpInetConnection -org.apache.http.HttpMessage -org.apache.http.HttpRequest -org.apache.http.HttpRequestFactory -org.apache.http.HttpRequestInterceptor -org.apache.http.HttpResponse -org.apache.http.HttpResponseFactory -org.apache.http.HttpResponseInterceptor -org.apache.http.HttpServerConnection -org.apache.http.HttpStatus -org.apache.http.HttpVersion -org.apache.http.MalformedChunkCodingException -org.apache.http.MethodNotSupportedException -org.apache.http.NameValuePair -org.apache.http.NoHttpResponseException -org.apache.http.ParseException -org.apache.http.ProtocolException -org.apache.http.ProtocolVersion -org.apache.http.ReasonPhraseCatalog -org.apache.http.RequestLine -org.apache.http.StatusLine -org.apache.http.TokenIterator -org.apache.http.UnsupportedHttpVersionException -org.apache.http.auth -org.apache.http.auth.AUTH -org.apache.http.auth.AuthScheme -org.apache.http.auth.AuthSchemeFactory -org.apache.http.auth.AuthSchemeRegistry -org.apache.http.auth.AuthScope -org.apache.http.auth.AuthState -org.apache.http.auth.AuthenticationException -org.apache.http.auth.BasicUserPrincipal -org.apache.http.auth.Credentials -org.apache.http.auth.InvalidCredentialsException -org.apache.http.auth.MalformedChallengeException -org.apache.http.auth.NTCredentials -org.apache.http.auth.NTUserPrincipal -org.apache.http.auth.UsernamePasswordCredentials -org.apache.http.auth.params -org.apache.http.auth.params.AuthPNames -org.apache.http.auth.params.AuthParamBean -org.apache.http.auth.params.AuthParams -org.apache.http.client -org.apache.http.client.AuthenticationHandler -org.apache.http.client.CircularRedirectException -org.apache.http.client.ClientProtocolException -org.apache.http.client.CookieStore -org.apache.http.client.CredentialsProvider -org.apache.http.client.HttpClient -org.apache.http.client.HttpRequestRetryHandler -org.apache.http.client.HttpResponseException -org.apache.http.client.NonRepeatableRequestException -org.apache.http.client.RedirectException -org.apache.http.client.RedirectHandler -org.apache.http.client.RequestDirector -org.apache.http.client.ResponseHandler -org.apache.http.client.UserTokenHandler -org.apache.http.client.entity -org.apache.http.client.entity.UrlEncodedFormEntity -org.apache.http.client.methods -org.apache.http.client.methods.AbortableHttpRequest -org.apache.http.client.methods.HttpDelete -org.apache.http.client.methods.HttpEntityEnclosingRequestBase -org.apache.http.client.methods.HttpGet -org.apache.http.client.methods.HttpHead -org.apache.http.client.methods.HttpOptions -org.apache.http.client.methods.HttpPost -org.apache.http.client.methods.HttpPut -org.apache.http.client.methods.HttpRequestBase -org.apache.http.client.methods.HttpTrace -org.apache.http.client.methods.HttpUriRequest -org.apache.http.client.params -org.apache.http.client.params.AllClientPNames -org.apache.http.client.params.AuthPolicy -org.apache.http.client.params.ClientPNames -org.apache.http.client.params.ClientParamBean -org.apache.http.client.params.CookiePolicy -org.apache.http.client.params.HttpClientParams -org.apache.http.client.protocol -org.apache.http.client.protocol.ClientContext -org.apache.http.client.protocol.ClientContextConfigurer -org.apache.http.client.protocol.RequestAddCookies -org.apache.http.client.protocol.RequestDefaultHeaders -org.apache.http.client.protocol.RequestProxyAuthentication -org.apache.http.client.protocol.RequestTargetAuthentication -org.apache.http.client.protocol.ResponseProcessCookies -org.apache.http.client.utils -org.apache.http.client.utils.CloneUtils -org.apache.http.client.utils.URIUtils -org.apache.http.client.utils.URLEncodedUtils -org.apache.http.conn -org.apache.http.conn.BasicEofSensorWatcher -org.apache.http.conn.BasicManagedEntity -org.apache.http.conn.ClientConnectionManager -org.apache.http.conn.ClientConnectionManagerFactory -org.apache.http.conn.ClientConnectionOperator -org.apache.http.conn.ClientConnectionRequest -org.apache.http.conn.ConnectTimeoutException -org.apache.http.conn.ConnectionKeepAliveStrategy -org.apache.http.conn.ConnectionPoolTimeoutException -org.apache.http.conn.ConnectionReleaseTrigger -org.apache.http.conn.EofSensorInputStream -org.apache.http.conn.EofSensorWatcher -org.apache.http.conn.HttpHostConnectException -org.apache.http.conn.ManagedClientConnection -org.apache.http.conn.MultihomePlainSocketFactory -org.apache.http.conn.OperatedClientConnection -org.apache.http.conn.params -org.apache.http.conn.params.ConnConnectionPNames -org.apache.http.conn.params.ConnConnectionParamBean -org.apache.http.conn.params.ConnManagerPNames -org.apache.http.conn.params.ConnManagerParamBean -org.apache.http.conn.params.ConnManagerParams -org.apache.http.conn.params.ConnPerRoute -org.apache.http.conn.params.ConnPerRouteBean -org.apache.http.conn.params.ConnRoutePNames -org.apache.http.conn.params.ConnRouteParamBean -org.apache.http.conn.params.ConnRouteParams -org.apache.http.conn.routing -org.apache.http.conn.routing.BasicRouteDirector -org.apache.http.conn.routing.HttpRoute -org.apache.http.conn.routing.HttpRouteDirector -org.apache.http.conn.routing.HttpRoutePlanner -org.apache.http.conn.routing.RouteInfo -org.apache.http.conn.routing.RouteInfo.LayerType -org.apache.http.conn.routing.RouteInfo.TunnelType -org.apache.http.conn.routing.RouteTracker -org.apache.http.conn.scheme -org.apache.http.conn.scheme.HostNameResolver -org.apache.http.conn.scheme.LayeredSocketFactory -org.apache.http.conn.scheme.PlainSocketFactory -org.apache.http.conn.scheme.Scheme -org.apache.http.conn.scheme.SchemeRegistry -org.apache.http.conn.scheme.SocketFactory -org.apache.http.conn.ssl -org.apache.http.conn.ssl.AbstractVerifier -org.apache.http.conn.ssl.AllowAllHostnameVerifier -org.apache.http.conn.ssl.BrowserCompatHostnameVerifier -org.apache.http.conn.ssl.SSLSocketFactory -org.apache.http.conn.ssl.StrictHostnameVerifier -org.apache.http.conn.ssl.X509HostnameVerifier -org.apache.http.conn.util -org.apache.http.conn.util.InetAddressUtils -org.apache.http.cookie -org.apache.http.cookie.ClientCookie -org.apache.http.cookie.Cookie -org.apache.http.cookie.CookieAttributeHandler -org.apache.http.cookie.CookieIdentityComparator -org.apache.http.cookie.CookieOrigin -org.apache.http.cookie.CookiePathComparator -org.apache.http.cookie.CookieSpec -org.apache.http.cookie.CookieSpecFactory -org.apache.http.cookie.CookieSpecRegistry -org.apache.http.cookie.MalformedCookieException -org.apache.http.cookie.SM -org.apache.http.cookie.SetCookie -org.apache.http.cookie.SetCookie2 -org.apache.http.cookie.params -org.apache.http.cookie.params.CookieSpecPNames -org.apache.http.cookie.params.CookieSpecParamBean -org.apache.http.entity -org.apache.http.entity.AbstractHttpEntity -org.apache.http.entity.BasicHttpEntity -org.apache.http.entity.BufferedHttpEntity -org.apache.http.entity.ByteArrayEntity -org.apache.http.entity.ContentLengthStrategy -org.apache.http.entity.ContentProducer -org.apache.http.entity.EntityTemplate -org.apache.http.entity.FileEntity -org.apache.http.entity.HttpEntityWrapper -org.apache.http.entity.InputStreamEntity -org.apache.http.entity.SerializableEntity -org.apache.http.entity.StringEntity -org.apache.http.impl -org.apache.http.impl.AbstractHttpClientConnection -org.apache.http.impl.AbstractHttpServerConnection -org.apache.http.impl.DefaultConnectionReuseStrategy -org.apache.http.impl.DefaultHttpClientConnection -org.apache.http.impl.DefaultHttpRequestFactory -org.apache.http.impl.DefaultHttpResponseFactory -org.apache.http.impl.DefaultHttpServerConnection -org.apache.http.impl.EnglishReasonPhraseCatalog -org.apache.http.impl.HttpConnectionMetricsImpl -org.apache.http.impl.NoConnectionReuseStrategy -org.apache.http.impl.SocketHttpClientConnection -org.apache.http.impl.SocketHttpServerConnection -org.apache.http.impl.auth -org.apache.http.impl.auth.AuthSchemeBase -org.apache.http.impl.auth.BasicScheme -org.apache.http.impl.auth.BasicSchemeFactory -org.apache.http.impl.auth.DigestScheme -org.apache.http.impl.auth.DigestSchemeFactory -org.apache.http.impl.auth.NTLMEngine -org.apache.http.impl.auth.NTLMEngineException -org.apache.http.impl.auth.NTLMScheme -org.apache.http.impl.auth.RFC2617Scheme -org.apache.http.impl.auth.UnsupportedDigestAlgorithmException -org.apache.http.impl.client -org.apache.http.impl.client.AbstractAuthenticationHandler -org.apache.http.impl.client.AbstractHttpClient -org.apache.http.impl.client.BasicCookieStore -org.apache.http.impl.client.BasicCredentialsProvider -org.apache.http.impl.client.BasicResponseHandler -org.apache.http.impl.client.ClientParamsStack -org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy -org.apache.http.impl.client.DefaultHttpClient -org.apache.http.impl.client.DefaultHttpRequestRetryHandler -org.apache.http.impl.client.DefaultProxyAuthenticationHandler -org.apache.http.impl.client.DefaultRedirectHandler -org.apache.http.impl.client.DefaultRequestDirector -org.apache.http.impl.client.DefaultTargetAuthenticationHandler -org.apache.http.impl.client.DefaultUserTokenHandler -org.apache.http.impl.client.EntityEnclosingRequestWrapper -org.apache.http.impl.client.RedirectLocations -org.apache.http.impl.client.RequestWrapper -org.apache.http.impl.client.RoutedRequest -org.apache.http.impl.client.TunnelRefusedException -org.apache.http.impl.conn -org.apache.http.impl.conn.AbstractClientConnAdapter -org.apache.http.impl.conn.AbstractPoolEntry -org.apache.http.impl.conn.AbstractPooledConnAdapter -org.apache.http.impl.conn.DefaultClientConnection -org.apache.http.impl.conn.DefaultClientConnectionOperator -org.apache.http.impl.conn.DefaultHttpRoutePlanner -org.apache.http.impl.conn.DefaultResponseParser -org.apache.http.impl.conn.IdleConnectionHandler -org.apache.http.impl.conn.LoggingSessionInputBuffer -org.apache.http.impl.conn.LoggingSessionOutputBuffer -org.apache.http.impl.conn.ProxySelectorRoutePlanner -org.apache.http.impl.conn.SingleClientConnManager -org.apache.http.impl.conn.SingleClientConnManager.ConnAdapter -org.apache.http.impl.conn.SingleClientConnManager.PoolEntry -org.apache.http.impl.conn.Wire -org.apache.http.impl.conn.tsccm -org.apache.http.impl.conn.tsccm.AbstractConnPool -org.apache.http.impl.conn.tsccm.BasicPoolEntry -org.apache.http.impl.conn.tsccm.BasicPoolEntryRef -org.apache.http.impl.conn.tsccm.BasicPooledConnAdapter -org.apache.http.impl.conn.tsccm.ConnPoolByRoute -org.apache.http.impl.conn.tsccm.PoolEntryRequest -org.apache.http.impl.conn.tsccm.RefQueueHandler -org.apache.http.impl.conn.tsccm.RefQueueWorker -org.apache.http.impl.conn.tsccm.RouteSpecificPool -org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager -org.apache.http.impl.conn.tsccm.WaitingThread -org.apache.http.impl.conn.tsccm.WaitingThreadAborter -org.apache.http.impl.cookie -org.apache.http.impl.cookie.AbstractCookieAttributeHandler -org.apache.http.impl.cookie.AbstractCookieSpec -org.apache.http.impl.cookie.BasicClientCookie -org.apache.http.impl.cookie.BasicClientCookie2 -org.apache.http.impl.cookie.BasicCommentHandler -org.apache.http.impl.cookie.BasicDomainHandler -org.apache.http.impl.cookie.BasicExpiresHandler -org.apache.http.impl.cookie.BasicMaxAgeHandler -org.apache.http.impl.cookie.BasicPathHandler -org.apache.http.impl.cookie.BasicSecureHandler -org.apache.http.impl.cookie.BestMatchSpec -org.apache.http.impl.cookie.BestMatchSpecFactory -org.apache.http.impl.cookie.BrowserCompatSpec -org.apache.http.impl.cookie.BrowserCompatSpecFactory -org.apache.http.impl.cookie.CookieSpecBase -org.apache.http.impl.cookie.DateParseException -org.apache.http.impl.cookie.DateUtils -org.apache.http.impl.cookie.NetscapeDomainHandler -org.apache.http.impl.cookie.NetscapeDraftHeaderParser -org.apache.http.impl.cookie.NetscapeDraftSpec -org.apache.http.impl.cookie.NetscapeDraftSpecFactory -org.apache.http.impl.cookie.RFC2109DomainHandler -org.apache.http.impl.cookie.RFC2109Spec -org.apache.http.impl.cookie.RFC2109SpecFactory -org.apache.http.impl.cookie.RFC2109VersionHandler -org.apache.http.impl.cookie.RFC2965CommentUrlAttributeHandler -org.apache.http.impl.cookie.RFC2965DiscardAttributeHandler -org.apache.http.impl.cookie.RFC2965DomainAttributeHandler -org.apache.http.impl.cookie.RFC2965PortAttributeHandler -org.apache.http.impl.cookie.RFC2965Spec -org.apache.http.impl.cookie.RFC2965SpecFactory -org.apache.http.impl.cookie.RFC2965VersionAttributeHandler -org.apache.http.impl.entity -org.apache.http.impl.entity.EntityDeserializer -org.apache.http.impl.entity.EntitySerializer -org.apache.http.impl.entity.LaxContentLengthStrategy -org.apache.http.impl.entity.StrictContentLengthStrategy -org.apache.http.impl.io -org.apache.http.impl.io.AbstractMessageParser -org.apache.http.impl.io.AbstractMessageWriter -org.apache.http.impl.io.AbstractSessionInputBuffer -org.apache.http.impl.io.AbstractSessionOutputBuffer -org.apache.http.impl.io.ChunkedInputStream -org.apache.http.impl.io.ChunkedOutputStream -org.apache.http.impl.io.ContentLengthInputStream -org.apache.http.impl.io.ContentLengthOutputStream -org.apache.http.impl.io.HttpRequestParser -org.apache.http.impl.io.HttpRequestWriter -org.apache.http.impl.io.HttpResponseParser -org.apache.http.impl.io.HttpResponseWriter -org.apache.http.impl.io.HttpTransportMetricsImpl -org.apache.http.impl.io.IdentityInputStream -org.apache.http.impl.io.IdentityOutputStream -org.apache.http.impl.io.SocketInputBuffer -org.apache.http.impl.io.SocketOutputBuffer -org.apache.http.io -org.apache.http.io.HttpMessageParser -org.apache.http.io.HttpMessageWriter -org.apache.http.io.HttpTransportMetrics -org.apache.http.io.SessionInputBuffer -org.apache.http.io.SessionOutputBuffer -org.apache.http.message -org.apache.http.message.AbstractHttpMessage -org.apache.http.message.BasicHeader -org.apache.http.message.BasicHeaderElement -org.apache.http.message.BasicHeaderElementIterator -org.apache.http.message.BasicHeaderIterator -org.apache.http.message.BasicHeaderValueFormatter -org.apache.http.message.BasicHeaderValueParser -org.apache.http.message.BasicHttpEntityEnclosingRequest -org.apache.http.message.BasicHttpRequest -org.apache.http.message.BasicHttpResponse -org.apache.http.message.BasicLineFormatter -org.apache.http.message.BasicLineParser -org.apache.http.message.BasicListHeaderIterator -org.apache.http.message.BasicNameValuePair -org.apache.http.message.BasicRequestLine -org.apache.http.message.BasicStatusLine -org.apache.http.message.BasicTokenIterator -org.apache.http.message.BufferedHeader -org.apache.http.message.HeaderGroup -org.apache.http.message.HeaderValueFormatter -org.apache.http.message.HeaderValueParser -org.apache.http.message.LineFormatter -org.apache.http.message.LineParser -org.apache.http.message.ParserCursor -org.apache.http.params -org.apache.http.params.AbstractHttpParams -org.apache.http.params.BasicHttpParams -org.apache.http.params.CoreConnectionPNames -org.apache.http.params.CoreProtocolPNames -org.apache.http.params.DefaultedHttpParams -org.apache.http.params.HttpAbstractParamBean -org.apache.http.params.HttpConnectionParamBean -org.apache.http.params.HttpConnectionParams -org.apache.http.params.HttpParams -org.apache.http.params.HttpProtocolParamBean -org.apache.http.params.HttpProtocolParams -org.apache.http.protocol -org.apache.http.protocol.BasicHttpContext -org.apache.http.protocol.BasicHttpProcessor -org.apache.http.protocol.DefaultedHttpContext -org.apache.http.protocol.ExecutionContext -org.apache.http.protocol.HTTP -org.apache.http.protocol.HttpContext -org.apache.http.protocol.HttpDateGenerator -org.apache.http.protocol.HttpExpectationVerifier -org.apache.http.protocol.HttpProcessor -org.apache.http.protocol.HttpRequestExecutor -org.apache.http.protocol.HttpRequestHandler -org.apache.http.protocol.HttpRequestHandlerRegistry -org.apache.http.protocol.HttpRequestHandlerResolver -org.apache.http.protocol.HttpRequestInterceptorList -org.apache.http.protocol.HttpResponseInterceptorList -org.apache.http.protocol.HttpService -org.apache.http.protocol.RequestConnControl -org.apache.http.protocol.RequestContent -org.apache.http.protocol.RequestDate -org.apache.http.protocol.RequestExpectContinue -org.apache.http.protocol.RequestTargetHost -org.apache.http.protocol.RequestUserAgent -org.apache.http.protocol.ResponseConnControl -org.apache.http.protocol.ResponseContent -org.apache.http.protocol.ResponseDate -org.apache.http.protocol.ResponseServer -org.apache.http.protocol.SyncBasicHttpContext -org.apache.http.protocol.UriPatternMatcher -org.apache.http.util -org.apache.http.util.ByteArrayBuffer -org.apache.http.util.CharArrayBuffer -org.apache.http.util.EncodingUtils -org.apache.http.util.EntityUtils -org.apache.http.util.ExceptionUtils -org.apache.http.util.LangUtils -org.apache.http.util.VersionInfo -org.json -org.json.JSONArray -org.json.JSONException -org.json.JSONObject -org.json.JSONStringer -org.json.JSONTokener -org.w3c.dom -org.w3c.dom.Attr -org.w3c.dom.CDATASection -org.w3c.dom.CharacterData -org.w3c.dom.Comment -org.w3c.dom.DOMConfiguration -org.w3c.dom.DOMError -org.w3c.dom.DOMErrorHandler -org.w3c.dom.DOMException -org.w3c.dom.DOMImplementation -org.w3c.dom.DOMImplementationList -org.w3c.dom.DOMImplementationSource -org.w3c.dom.DOMLocator -org.w3c.dom.DOMStringList -org.w3c.dom.Document -org.w3c.dom.DocumentFragment -org.w3c.dom.DocumentType -org.w3c.dom.Element -org.w3c.dom.Entity -org.w3c.dom.EntityReference -org.w3c.dom.NameList -org.w3c.dom.NamedNodeMap -org.w3c.dom.Node -org.w3c.dom.NodeList -org.w3c.dom.Notation -org.w3c.dom.ProcessingInstruction -org.w3c.dom.Text -org.w3c.dom.TypeInfo -org.w3c.dom.UserDataHandler -org.w3c.dom.ls -org.w3c.dom.ls.DOMImplementationLS -org.w3c.dom.ls.LSException -org.w3c.dom.ls.LSInput -org.w3c.dom.ls.LSOutput -org.w3c.dom.ls.LSParser -org.w3c.dom.ls.LSParserFilter -org.w3c.dom.ls.LSResourceResolver -org.w3c.dom.ls.LSSerializer -org.xml.sax -org.xml.sax.AttributeList -org.xml.sax.Attributes -org.xml.sax.ContentHandler -org.xml.sax.DTDHandler -org.xml.sax.DocumentHandler -org.xml.sax.EntityResolver -org.xml.sax.ErrorHandler -org.xml.sax.HandlerBase -org.xml.sax.InputSource -org.xml.sax.Locator -org.xml.sax.Parser -org.xml.sax.SAXException -org.xml.sax.SAXNotRecognizedException -org.xml.sax.SAXNotSupportedException -org.xml.sax.SAXParseException -org.xml.sax.XMLFilter -org.xml.sax.XMLReader -org.xml.sax.ext -org.xml.sax.ext.Attributes2 -org.xml.sax.ext.Attributes2Impl -org.xml.sax.ext.DeclHandler -org.xml.sax.ext.DefaultHandler2 -org.xml.sax.ext.EntityResolver2 -org.xml.sax.ext.LexicalHandler -org.xml.sax.ext.Locator2 -org.xml.sax.ext.Locator2Impl -org.xml.sax.helpers -org.xml.sax.helpers.AttributeListImpl -org.xml.sax.helpers.AttributesImpl -org.xml.sax.helpers.DefaultHandler -org.xml.sax.helpers.LocatorImpl -org.xml.sax.helpers.NamespaceSupport -org.xml.sax.helpers.ParserAdapter -org.xml.sax.helpers.ParserFactory -org.xml.sax.helpers.XMLFilterImpl -org.xml.sax.helpers.XMLReaderAdapter -org.xml.sax.helpers.XMLReaderFactory -org.xmlpull.v1 -org.xmlpull.v1.XmlPullParser -org.xmlpull.v1.XmlPullParserException -org.xmlpull.v1.XmlPullParserFactory -org.xmlpull.v1.XmlSerializer -org.xmlpull.v1.sax2 -org.xmlpull.v1.sax2.Driver From 13f9dea6fd381a64e6f48c5fc6327506255877d9 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Sat, 20 Aug 2022 00:26:09 +0530 Subject: [PATCH 24/35] add deps --- appinventor/buildserver/build.gradle.kts | 3 ++ .../component-scripts/build.gradle.kts | 9 +++- appinventor/components/build.gradle.kts | 47 +++++++++++++++++++ .../components/src/AndroidManifest.xml | 8 ++++ appinventor/gradle.properties | 4 +- 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 appinventor/components/src/AndroidManifest.xml diff --git a/appinventor/buildserver/build.gradle.kts b/appinventor/buildserver/build.gradle.kts index fed6e196f5c..a54ff95e6f8 100644 --- a/appinventor/buildserver/build.gradle.kts +++ b/appinventor/buildserver/build.gradle.kts @@ -11,6 +11,9 @@ sourceSets { java { setSrcDirs(listOf("src")) } +// resources { +// setSrcDirs(projects.components.artifacts.get("component-resources").outputs.files.map { it.absolutePath }) +// } } test { diff --git a/appinventor/component-scripts/build.gradle.kts b/appinventor/component-scripts/build.gradle.kts index 21db87310e0..4059b3b9149 100644 --- a/appinventor/component-scripts/build.gradle.kts +++ b/appinventor/component-scripts/build.gradle.kts @@ -6,4 +6,11 @@ dependencies { implementation(projects.commonUtils) implementation(projects.componentConstants) implementation(projects.componentAnnotations) -} \ No newline at end of file + implementation("com.google.guava:guava:14.0.1") + implementation("org.json:json:20220320") +} + +tasks.withType(JavaCompile::class).forEach { + // add utf-8 encoding to all source files + it.options.encoding = "UTF-8" +} diff --git a/appinventor/components/build.gradle.kts b/appinventor/components/build.gradle.kts index 2c9f1ce5609..f9830fa6622 100644 --- a/appinventor/components/build.gradle.kts +++ b/appinventor/components/build.gradle.kts @@ -25,6 +25,7 @@ android { } sourceSets { named("main") { + manifest.srcFile("src/AndroidManifest.xml") java { setSrcDirs(listOf("src")) } @@ -38,8 +39,54 @@ android { } dependencies { +// println("component constants: ${projects.componentConstants.artifacts}") + implementation(projects.commonVersion) implementation(projects.componentConstants) implementation(projects.componentAnnotations) implementation(projects.barcode) annotationProcessor(projects.componentScripts) + implementation("androidx.annotation:annotation:1.0.0") + implementation("androidx.core:core:1.0.0") + implementation("androidx.appcompat:appcompat:1.0.0") + implementation(files("../lib/kawa/kawa-1.11-modified.jar")) + implementation("org.locationtech.jts:jts-core:1.15.0") + implementation("org.osmdroid:osmdroid-android:6.1.11") + implementation("com.google.guava:guava:14.0.1") + implementation("redis.clients:jedis:3.0.0") + implementation("com.firebase:firebase-client-android:2.5.0") +// implementation("com.google.api-client:google-api-client:1.10.3-beta") +// implementation("com.google.api-client:google-api-client-android2:1.10.3-beta") +// implementation("com.google.http-client:google-http-client:1.10.3-beta") +// implementation("com.google.http-client:google-http-client-android2:1.10.3-beta") +// implementation("com.google.http-client:google-http-client-android3:1.10.3-beta") + implementation(fileTree("../lib/oauth") { include("*.jar") }) + implementation("com.google.apis:google-api-services-fusiontables:v1-rev19-1.13.2-beta") + implementation("androidx.cardview:cardview:1.0.0") + implementation("androidx.recyclerview:recyclerview:1.0.0") + implementation("org.apache.httpcomponents:httpmime:4.3.2") + implementation("ch.acra:acra:4.4.0") +// implementation("org.webrtc:google-webrtc:1.0.19742") + implementation(files("../lib/webrtc/webrtc.jar")) + implementation(files("../lib/physicaloid/physicaloid-library.jar")) + implementation("com.google.protobuf:protobuf-java:3.0.0") + implementation("org.twitter4j:twitter4j-core:3.0.5") + implementation("org.twitter4j:twitter4j-media-support:3.0.5") + implementation("com.caverock:androidsvg-aar:1.4") + implementation("org.json:json:20220320") + } + +// Ref: https://docs.gradle.org/current/userguide/cross_project_publications.html#cross_project_publications + +//val androidRuntimeJar: Configuration by configurations.creating { +// isCanBeConsumed = true +// isCanBeResolved = false +// // If you want this configuration to share the same dependencies, otherwise omit this line +// extendsFrom(configurations["implementation"], configurations["runtimeOnly"]) +//} +// +//artifacts { +// archives(androidRuntimeJar) +//} + +android.libraryVariants.forEach(::println) \ No newline at end of file diff --git a/appinventor/components/src/AndroidManifest.xml b/appinventor/components/src/AndroidManifest.xml new file mode 100644 index 00000000000..981c0d932b2 --- /dev/null +++ b/appinventor/components/src/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/appinventor/gradle.properties b/appinventor/gradle.properties index b39e7e7a991..7a8cac2e269 100644 --- a/appinventor/gradle.properties +++ b/appinventor/gradle.properties @@ -1 +1,3 @@ -org.gradle.java.home=C:/Users/Pavitra/.jdks/temurin-11.0.16 \ No newline at end of file +org.gradle.java.home=C:/Users/Pavitra/.jdks/temurin-11.0.16 +file.encoding=utf-8 +android.useAndroidX=true \ No newline at end of file From 789ae3a17b64f6b790f4bb176cbece047321a054 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Mon, 12 Sep 2022 21:17:13 +0530 Subject: [PATCH 25/35] Gradle 7.5 --- appinventor/gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appinventor/gradle/wrapper/gradle-wrapper.properties b/appinventor/gradle/wrapper/gradle-wrapper.properties index 41dfb87909a..8049c684f04 100644 --- a/appinventor/gradle/wrapper/gradle-wrapper.properties +++ b/appinventor/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From c9b68a57f5109cb17b5d74d22fd6b475ba14255e Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Mon, 12 Sep 2022 21:20:29 +0530 Subject: [PATCH 26/35] Buildserver is now running --- appinventor/buildserver/build.gradle.kts | 14 +++++++++++--- appinventor/common-utils/build.gradle.kts | 13 ++++++++++--- appinventor/common-version/build.gradle.kts | 13 ++++++++++--- appinventor/component-constants/build.gradle.kts | 12 +++++++++--- appinventor/components/build.gradle.kts | 6 ++++++ 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/appinventor/buildserver/build.gradle.kts b/appinventor/buildserver/build.gradle.kts index a54ff95e6f8..8abe9c60ec0 100644 --- a/appinventor/buildserver/build.gradle.kts +++ b/appinventor/buildserver/build.gradle.kts @@ -6,14 +6,20 @@ application { mainClass.set("com.google.appinventor.buildserver.BuildServer") } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} + sourceSets { main { java { setSrcDirs(listOf("src")) } -// resources { -// setSrcDirs(projects.components.artifacts.get("component-resources").outputs.files.map { it.absolutePath }) -// } + resources { +// setSrcDirs(projects.components.artifacts) + } } test { @@ -28,6 +34,8 @@ dependencies { implementation(projects.commonVersion) implementation(projects.componentConstants) implementation(fileTree("lib") { include("*.jar") }) +// implementation("com.sun.jersey:jersey-grizzly2:1.19.1") +// implementation("com.sun.jersey:jersey-json:1.19.1") implementation("org.json:json:20220320") implementation("args4j:args4j:2.0.22") implementation("com.google.guava:guava:14.0.1") diff --git a/appinventor/common-utils/build.gradle.kts b/appinventor/common-utils/build.gradle.kts index 6b2a16629ec..b15c40d4581 100644 --- a/appinventor/common-utils/build.gradle.kts +++ b/appinventor/common-utils/build.gradle.kts @@ -1,9 +1,16 @@ plugins { - id("org.docstr.gwt") version "1.1.21" + `java-library` +// id("org.docstr.gwt") version "1.1.21" } -gwt { - gwtVersion = "2.8.1" +//gwt { +// gwtVersion = "2.8.1" +//} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } } sourceSets { diff --git a/appinventor/common-version/build.gradle.kts b/appinventor/common-version/build.gradle.kts index 5002197785d..9e75e0c6c35 100644 --- a/appinventor/common-version/build.gradle.kts +++ b/appinventor/common-version/build.gradle.kts @@ -3,11 +3,18 @@ import java.util.Calendar import java.text.SimpleDateFormat plugins { - id("org.docstr.gwt") version "1.1.21" + `java-library` +// id("org.docstr.gwt") version "1.1.21" } -gwt { - gwtVersion = "2.8.1" +//gwt { +// gwtVersion = "2.8.1" +//} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } } val taskGitBuildId by tasks.creating(Copy::class) { diff --git a/appinventor/component-constants/build.gradle.kts b/appinventor/component-constants/build.gradle.kts index c39550650c8..8eafd6b414f 100644 --- a/appinventor/component-constants/build.gradle.kts +++ b/appinventor/component-constants/build.gradle.kts @@ -1,10 +1,16 @@ plugins { `java-library` - id("org.docstr.gwt") version "1.1.21" +// id("org.docstr.gwt") version "1.1.21" } -gwt { - gwtVersion = "2.8.1" +//gwt { +// gwtVersion = "2.8.1" +//} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } } dependencies { diff --git a/appinventor/components/build.gradle.kts b/appinventor/components/build.gradle.kts index f9830fa6622..765e850c9d1 100644 --- a/appinventor/components/build.gradle.kts +++ b/appinventor/components/build.gradle.kts @@ -38,6 +38,12 @@ android { } } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } +} + dependencies { // println("component constants: ${projects.componentConstants.artifacts}") implementation(projects.commonVersion) From 5f2ae3f134b6198c4b91cb3f0489d75b2a46ac14 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Sat, 15 Oct 2022 04:49:17 +0530 Subject: [PATCH 27/35] Follow Gradle source set convention --- .../com/google/appinventor/images/delete.png | Bin 297 -> 0 bytes appinventor/buildserver/build.gradle.kts | 24 +- .../appinventor/buildserver/AabCompiler.java | 0 .../buildserver/AnimationXmlConstants.java | 0 .../appinventor/buildserver/BuildServer.java | 0 .../appinventor/buildserver/Compiler.java | 0 .../appinventor/buildserver/DexExecTask.java | 0 .../appinventor/buildserver/Execution.java | 0 .../buildserver/FormPropertiesAnalyzer.java | 0 .../google/appinventor/buildserver/Main.java | 0 .../buildserver/NonQueuingExecutor.java | 0 .../appinventor/buildserver/PathUtil.java | 0 .../appinventor/buildserver/Project.java | 0 .../buildserver/ProjectBuilder.java | 0 .../appinventor/buildserver/Result.java | 0 .../appinventor/buildserver/Signatures.java | 0 .../buildserver/YoungAndroidConstants.java | 0 .../appinventor/buildserver/package-info.java | 0 .../buildserver/resources/runtime.scm | 0 .../appinventor/buildserver/resources/ya.png | Bin .../buildserver/stats/NullStatReporter.java | 0 .../buildserver/stats/SimpleStatReporter.java | 0 .../buildserver/stats/StatCalculator.java | 0 .../buildserver/stats/StatReporter.java | 0 .../buildserver/util/AARLibraries.java | 0 .../buildserver/util/AARLibrary.java | 0 .../buildserver/util/AabZipper.java | 0 .../buildserver/util/BaseFileWrapper.java | 0 .../buildserver/util/BaseLogger.java | 0 .../util/NOPCompilationProgress.java | 0 .../appinventor/buildserver/CompilerTest.java | 0 .../FormPropertiesAnalyzerTest.java | 0 .../buildserver/NonQueuingExecutorTest.java | 0 .../buildserver/YailAndroidTest.java | 0 .../appinventor/buildserver/YailEvalTest.java | 1 - .../appinventor/buildserver/YailEvalTest.scm | 0 .../buildserver/testComponentsAsDictKeys.scm | 0 .../common => }/CommonUtils.gwt.xml | 0 appinventor/common-utils/build.gradle.kts | 14 - .../common/utils/FilenameUtils.java | 0 .../appinventor/common/utils/StringUtils.java | 0 .../common/utils/FilenameUtilsTest.java | 0 .../common/utils/StringUtilsTest.java | 0 .../common => }/CommonVersion.gwt.xml | 0 appinventor/common-version/build.gradle.kts | 8 +- .../common/testutils/TestUtils.java | 0 .../common/testutils/package-info.java | 0 .../common/version/AppInventorFeatures.java | 0 .../common/version/package-info.java | 0 .../javax.annotation.processing.Processor | 0 .../components => }/CommonConstants.gwt.xml | 0 .../components/common/ChartType.java | 0 .../components/common/LineType.java | 0 .../components/common/PointStyle.java | 0 .../components/common/HtmlEntitiesTest.java | 0 appinventor/components/build.gradle.kts | 13 - .../util/NativeOpenStreetMapController.java | 1590 ----------------- .../src/{ => main}/AndroidManifest.xml | 4 +- .../runtime/AccelerometerSensor.java | 0 .../runtime/AccessibleComponent.java | 0 .../runtime/ActivityResultListener.java | 0 .../components/runtime/ActivityStarter.java | 0 .../components/runtime/AlarmHandler.java | 0 .../runtime/AndroidNonvisibleComponent.java | 0 .../runtime/AndroidViewComponent.java | 0 .../runtime/AppInventorCompatActivity.java | 0 .../runtime/AreaChartDataModel.java | 0 .../components/runtime/AreaChartView.java | 0 .../components/runtime/AxisChartView.java | 0 .../appinventor/components/runtime/Ball.java | 0 .../components/runtime/BarChartDataModel.java | 0 .../components/runtime/BarChartView.java | 0 .../components/runtime/BarcodeScanner.java | 0 .../components/runtime/Barometer.java | 0 .../components/runtime/BluetoothClient.java | 0 .../runtime/BluetoothConnectionBase.java | 0 .../runtime/BluetoothConnectionListener.java | 0 .../components/runtime/BluetoothServer.java | 0 .../runtime/BufferedSingleValueSensor.java | 0 .../components/runtime/Button.java | 0 .../components/runtime/ButtonBase.java | 0 .../components/runtime/Camcorder.java | 0 .../components/runtime/Camera.java | 0 .../components/runtime/Canvas.java | 0 .../appinventor/components/runtime/Chart.java | 0 .../components/runtime/Chart2DDataModel.java | 0 .../components/runtime/ChartData2D.java | 0 .../components/runtime/ChartDataBase.java | 0 .../components/runtime/ChartDataModel.java | 0 .../components/runtime/ChartView.java | 0 .../components/runtime/CheckBox.java | 0 .../components/runtime/Circle.java | 0 .../appinventor/components/runtime/Clock.java | 0 .../components/runtime/CloudDB.java | 0 .../components/runtime/Component.java | 0 .../runtime/ComponentContainer.java | 0 .../components/runtime/ContactPicker.java | 0 .../components/runtime/DataFile.java | 0 .../components/runtime/DataSource.java | 0 .../runtime/DataSourceChangeListener.java | 0 .../components/runtime/DatePicker.java | 0 .../components/runtime/Deleteable.java | 0 .../runtime/EmailAddressAdapter.java | 0 .../components/runtime/EmailPicker.java | 0 .../components/runtime/Ev3ColorSensor.java | 0 .../components/runtime/Ev3Commands.java | 0 .../components/runtime/Ev3GyroSensor.java | 0 .../components/runtime/Ev3Motors.java | 0 .../components/runtime/Ev3Sound.java | 0 .../components/runtime/Ev3TouchSensor.java | 0 .../appinventor/components/runtime/Ev3UI.java | 0 .../runtime/Ev3UltrasonicSensor.java | 0 .../components/runtime/EventDispatcher.java | 0 .../components/runtime/FeatureCollection.java | 0 .../appinventor/components/runtime/File.java | 0 .../components/runtime/FileBase.java | 0 .../components/runtime/FirebaseDB.java | 0 .../appinventor/components/runtime/Form.java | 0 .../runtime/FusiontablesControl.java | 0 .../components/runtime/GameClient.java | 0 .../components/runtime/GyroscopeSensor.java | 0 .../components/runtime/HVArrangement.java | 0 .../runtime/HandlesEventDispatching.java | 0 .../runtime/HorizontalArrangement.java | 0 .../runtime/HorizontalScrollArrangement.java | 0 .../components/runtime/Hygrometer.java | 0 .../appinventor/components/runtime/Image.java | 0 .../components/runtime/ImagePicker.java | 0 .../components/runtime/ImageSprite.java | 0 .../runtime/IntentBasedSpeechRecognizer.java | 0 .../appinventor/components/runtime/Label.java | 0 .../components/runtime/Layout.java | 0 .../runtime/LegoMindstormsEv3Base.java | 0 .../runtime/LegoMindstormsEv3Sensor.java | 0 .../runtime/LegoMindstormsNxtBase.java | 0 .../runtime/LegoMindstormsNxtSensor.java | 0 .../components/runtime/LightSensor.java | 0 .../runtime/LineChartBaseDataModel.java | 0 .../runtime/LineChartDataModel.java | 0 .../components/runtime/LineChartView.java | 0 .../components/runtime/LineChartViewBase.java | 0 .../components/runtime/LineString.java | 0 .../components/runtime/LinearLayout.java | 0 .../runtime/ListAdapterWithRecyclerView.java | 0 .../components/runtime/ListPicker.java | 0 .../runtime/ListPickerActivity.java | 0 .../components/runtime/ListView.java | 0 .../components/runtime/LocationSensor.java | 0 .../runtime/MagneticFieldSensor.java | 0 .../appinventor/components/runtime/Map.java | 0 .../components/runtime/MapFeatureBase.java | 0 .../runtime/MapFeatureBaseWithFill.java | 0 .../runtime/MapFeatureContainerBase.java | 0 .../components/runtime/Marker.java | 0 .../components/runtime/MediaStore.java | 0 .../components/runtime/Navigation.java | 0 .../components/runtime/NearField.java | 0 .../components/runtime/Notifier.java | 0 .../components/runtime/NxtColorSensor.java | 0 .../components/runtime/NxtDirectCommands.java | 0 .../components/runtime/NxtDrive.java | 0 .../components/runtime/NxtLightSensor.java | 0 .../components/runtime/NxtSoundSensor.java | 0 .../components/runtime/NxtTouchSensor.java | 0 .../runtime/NxtUltrasonicSensor.java | 0 .../runtime/ObservableDataSource.java | 0 .../components/runtime/OnClearListener.java | 0 .../runtime/OnCreateOptionsMenuListener.java | 0 .../components/runtime/OnDestroyListener.java | 0 .../runtime/OnNewIntentListener.java | 0 .../OnOptionsItemSelectedListener.java | 0 .../runtime/OnOrientationChangeListener.java | 0 .../components/runtime/OnPauseListener.java | 0 .../components/runtime/OnResumeListener.java | 0 .../components/runtime/OnStopListener.java | 0 .../components/runtime/OptionHelper.java | 0 .../components/runtime/OrientationSensor.java | 0 .../components/runtime/PasswordTextBox.java | 0 .../components/runtime/Pedometer.java | 0 .../runtime/PermissionResultHandler.java | 0 .../components/runtime/PhoneCall.java | 0 .../components/runtime/PhoneNumberPicker.java | 0 .../components/runtime/PhoneStatus.java | 0 .../components/runtime/Picker.java | 0 .../components/runtime/PieChartDataModel.java | 0 .../components/runtime/PieChartView.java | 0 .../components/runtime/Player.java | 0 .../runtime/PointChartDataModel.java | 0 .../components/runtime/PointChartView.java | 0 .../components/runtime/Polygon.java | 0 .../components/runtime/PolygonBase.java | 0 .../components/runtime/ProximitySensor.java | 0 .../runtime/RealTimeDataSource.java | 0 .../components/runtime/Rectangle.java | 0 .../components/runtime/ReplApplication.java | 0 .../components/runtime/ReplForm.java | 1 - .../components/runtime/ScaledFrameLayout.java | 0 .../runtime/ScatterChartDataModel.java | 0 .../components/runtime/ScatterChartView.java | 0 .../components/runtime/SensorComponent.java | 0 .../components/runtime/Serial.java | 0 .../runtime/ServiceBasedSpeechRecognizer.java | 0 .../components/runtime/Sharing.java | 0 .../components/runtime/SingleValueSensor.java | 0 .../components/runtime/Slider.java | 0 .../appinventor/components/runtime/Sound.java | 0 .../components/runtime/SoundRecorder.java | 0 .../components/runtime/SpeechListener.java | 0 .../components/runtime/SpeechRecognizer.java | 0 .../runtime/SpeechRecognizerController.java | 0 .../components/runtime/Spinner.java | 0 .../components/runtime/SplashActivity.java | 0 .../components/runtime/Spreadsheet.java | 0 .../components/runtime/Sprite.java | 0 .../components/runtime/Switch.java | 0 .../components/runtime/TableArrangement.java | 0 .../components/runtime/TableLayout.java | 0 .../components/runtime/TextBox.java | 0 .../components/runtime/TextBoxBase.java | 0 .../components/runtime/TextToSpeech.java | 0 .../components/runtime/Texting.java | 0 .../components/runtime/Thermometer.java | 0 .../components/runtime/TimePicker.java | 0 .../components/runtime/TinyDB.java | 0 .../components/runtime/TinyWebDB.java | 0 .../components/runtime/ToggleBase.java | 0 .../components/runtime/Translator.java | 0 .../components/runtime/Twitter.java | 0 .../runtime/VerticalArrangement.java | 0 .../runtime/VerticalScrollArrangement.java | 0 .../components/runtime/VideoPlayer.java | 0 .../components/runtime/VisibleComponent.java | 0 .../components/runtime/Voting.java | 0 .../appinventor/components/runtime/Web.java | 24 +- .../components/runtime/WebViewActivity.java | 0 .../components/runtime/WebViewer.java | 0 .../components/runtime/YandexTranslate.java | 0 .../components/runtime/collect/Lists.java | 0 .../components/runtime/collect/Maps.java | 0 .../components/runtime/collect/Sets.java | 0 .../runtime/collect/package-info.java | 0 .../errors/ArrayIndexOutOfBoundsError.java | 0 .../runtime/errors/AssertionFailure.java | 0 .../runtime/errors/ConversionError.java | 0 .../runtime/errors/DispatchableError.java | 0 .../errors/FileAlreadyExistsError.java | 0 .../runtime/errors/FileIOError.java | 0 .../runtime/errors/IllegalArgumentError.java | 0 .../runtime/errors/IterationError.java | 0 .../runtime/errors/NoSuchFileError.java | 0 .../runtime/errors/PermissionException.java | 0 .../errors/RequestTimeoutException.java | 0 .../runtime/errors/RuntimeError.java | 0 .../runtime/errors/StopBlocksExecution.java | 0 .../errors/UninitializedInstanceError.java | 0 .../errors/UnknownFileHandleError.java | 0 .../runtime/errors/YailRuntimeError.java | 0 .../runtime/errors/package-info.java | 0 .../components/runtime/multidex/MultiDex.java | 0 .../runtime/multidex/MultiDexApplication.java | 0 .../runtime/multidex/MultiDexExtractor.java | 0 .../runtime/multidex/ZipEntryReader.java | 0 .../components/runtime/multidex/ZipUtil.java | 0 .../components/runtime/package-info.java | 0 .../runtime/translate/TranslatorToken.java | 0 .../components/runtime/translate/tr.proto | 0 .../runtime/util/AccountChooser.java | 0 .../runtime/util/AlignmentUtil.java | 0 .../runtime/util/AnimationUtil.java | 0 .../components/runtime/util/AppInvHTTPD.java | 0 .../components/runtime/util/AssetFetcher.java | 0 .../runtime/util/AsyncCallbackFacade.java | 0 .../runtime/util/AsyncCallbackPair.java | 0 .../components/runtime/util/AsynchUtil.java | 0 .../components/runtime/util/Base58Util.java | 0 .../components/runtime/util/BiggerFuture.java | 0 .../runtime/util/BluetoothReflection.java | 0 .../components/runtime/util/BoundingBox.java | 0 .../runtime/util/BulkPermissionRequest.java | 0 .../runtime/util/ChartDataSourceUtil.java | 0 .../runtime/util/ClientLoginHelper.java | 0 .../runtime/util/CloudDBJedisListener.java | 0 .../runtime/util/CompositeFileOperation.java | 0 .../components/runtime/util/Continuation.java | 0 .../runtime/util/ContinuationUtil.java | 0 .../components/runtime/util/CsvUtil.java | 0 .../runtime/util/CustomMediaController.java | 0 .../components/runtime/util/Dates.java | 0 .../components/runtime/util/DonutUtil.java | 0 .../runtime/util/DummyMapController.java | 0 .../components/runtime/util/EclairUtil.java | 0 .../components/runtime/util/ElementsUtil.java | 0 .../runtime/util/ErrorMessages.java | 0 .../runtime/util/Ev3BinaryParser.java | 0 .../components/runtime/util/Ev3Constants.java | 0 .../runtime/util/ExternalTextToSpeech.java | 0 .../runtime/util/FileAccessMode.java | 0 .../runtime/util/FileOperation.java | 0 .../runtime/util/FileReadOperation.java | 0 .../runtime/util/FileStreamOperation.java | 0 .../runtime/util/FileStreamReadOperation.java | 0 .../util/FileStreamWriteOperation.java | 0 .../components/runtime/util/FileUtil.java | 0 .../runtime/util/FileWriteOperation.java | 0 .../components/runtime/util/FroyoUtil.java | 0 .../runtime/util/FroyoWebViewClient.java | 0 .../runtime/util/FullScreenVideoUtil.java | 0 .../components/runtime/util/GameInstance.java | 0 .../components/runtime/util/GeoJSONUtil.java | 0 .../components/runtime/util/GeometryUtil.java | 2 +- .../runtime/util/GingerbreadUtil.java | 0 .../components/runtime/util/HashDatabase.java | 0 .../runtime/util/HashDbInitialize.java | 0 .../components/runtime/util/HashFile.java | 0 .../runtime/util/HoneycombMR1Util.java | 0 .../runtime/util/HoneycombUtil.java | 0 .../runtime/util/HoneycombWebViewClient.java | 0 .../runtime/util/IClientLoginHelper.java | 0 .../components/runtime/util/IOUtils.java | 0 .../runtime/util/ITextToSpeech.java | 0 .../runtime/util/IceCreamSandwichUtil.java | 0 .../runtime/util/ImageViewUtil.java | 0 .../runtime/util/InternalTextToSpeech.java | 0 .../runtime/util/JavaStringUtils.java | 0 .../runtime/util/JellybeanUtil.java | 0 .../components/runtime/util/JsonUtil.java | 0 .../components/runtime/util/KitkatUtil.java | 0 .../ListViewArrayAdapterImageSingleText.java | 0 .../ListViewArrayAdapterImageTwoText.java | 0 .../util/ListViewArrayAdapterSingleText.java | 0 .../util/ListViewArrayAdapterTwoText.java | 0 .../ListViewArrayAdapterTwoTextLinear.java | 0 .../components/runtime/util/LollipopUtil.java | 0 .../components/runtime/util/MapFactory.java | 2 +- .../components/runtime/util/MediaUtil.java | 0 .../runtime/util/MemoryLeakUtil.java | 0 .../components/runtime/util/NanoHTTPD.java | 0 .../util/NativeOpenStreetMapController.java | 1590 +++++++++++++++++ .../components/runtime/util/NougatUtil.java | 0 .../components/runtime/util/OAuth2Helper.java | 0 .../runtime/util/OnInitializeListener.java | 0 .../runtime/util/OrientationSensorUtil.java | 0 .../components/runtime/util/PaintUtil.java | 0 .../runtime/util/PhoneCallUtil.java | 0 .../runtime/util/PlayerListDelta.java | 0 .../components/runtime/util/PropertyUtil.java | 0 .../components/runtime/util/QUtil.java | 0 .../components/runtime/util/RUtil.java | 0 .../runtime/util/RetValManager.java | 0 .../runtime/util/RuntimeErrorAlert.java | 0 .../components/runtime/util/ScopedFile.java | 0 .../runtime/util/ScreenDensityUtil.java | 0 .../components/runtime/util/SdkLevel.java | 0 .../runtime/util/SingleFileOperation.java | 0 .../runtime/util/SmsBroadcastReceiver.java | 0 .../components/runtime/util/Synchronizer.java | 0 .../components/runtime/util/TelnetRepl.java | 0 .../components/runtime/util/TextViewUtil.java | 0 .../runtime/util/TimerInternal.java | 0 .../components/runtime/util/TypeUtil.java | 0 .../components/runtime/util/ViewUtil.java | 0 .../runtime/util/WebRTCNativeMgr.java | 0 .../runtime/util/WebServiceUtil.java | 0 .../components/runtime/util/XmlParser.java | 0 .../runtime/util/YailConstants.java | 0 .../runtime/util/YailDictionary.java | 0 .../components/runtime/util/YailList.java | 0 .../runtime/util/YailNumberToString.java | 0 .../components/runtime/util/YailObject.java | 0 .../components/runtime/util/package-info.java | 0 .../util/theme/ClassicThemeHelper.java | 0 .../util/theme/HoneycombThemeHelper.java | 0 .../theme/IceCreamSandwichThemeHelper.java | 0 .../runtime/util/theme/ThemeHelper.java | 0 .../runtime/view/ZoomControlView.java | 0 .../{tests => src/test}/AndroidManifest.xml | 0 .../test.txt | 0 .../usa-new-england.geojson | 0 .../{tests => src/test}/assets/marker.svg | 0 .../{tests => src/test}/assets/test.txt | 0 .../{tests => src/test}/assets/testCsv.csv | 0 .../test}/assets/testCsv2Rows.csv | 0 .../{tests => src/test}/assets/testJson.json | 0 .../runtime/AbstractAxisChartTest.java | 0 .../runtime/AbstractChartDataModel2DTest.java | 0 .../AbstractChartDataModelBaseTest.java | 0 .../components/runtime/AbstractChartTest.java | 0 .../AbstractPointChartDataModelTest.java | 0 .../runtime/AreaChartDataModelTest.java | 0 .../components/runtime/AreaChartTest.java | 0 .../runtime/BarChartDataModelTest.java | 0 .../components/runtime/BarChartTest.java | 0 .../runtime/BluetoothConnectionBaseTest.java | 0 .../components/runtime/ChartData2DTest.java | 0 .../components/runtime/CheckboxTest.java | 0 .../components/runtime/CircleTest.java | 0 .../components/runtime/ClockTest.java | 0 .../components/runtime/DataFileTest.java | 0 .../runtime/FeatureCollectionTest.java | 0 .../components/runtime/FileTest.java | 0 .../components/runtime/FileTestBase.java | 0 .../components/runtime/FormTest.java | 0 .../components/runtime/LabelTest.java | 0 .../runtime/LegoMindstormsNxtBaseTest.java | 0 .../runtime/LineChartDataModelTest.java | 0 .../components/runtime/LineChartTest.java | 0 .../components/runtime/LineStringTest.java | 0 .../components/runtime/ListViewTest.java | 0 .../components/runtime/MapDistanceTest.java | 0 .../components/runtime/MapTest.java | 1 - .../components/runtime/MapTestBase.java | 0 .../components/runtime/MarkerTest.java | 0 .../runtime/OrientationSensorTest.java | 0 .../runtime/PieChartDataModelTest.java | 0 .../components/runtime/PieChartTest.java | 0 .../components/runtime/PolygonTest.java | 0 .../components/runtime/RectangleTest.java | 0 .../components/runtime/ReplFormTest.java | 0 .../runtime/RobolectricTestBase.java | 0 .../runtime/ScatterChartDataModelTest.java | 0 .../components/runtime/ScatterChartTest.java | 0 .../components/runtime/SpriteTest.java | 0 .../components/runtime/SwitchTest.java | 0 .../runtime/TableArrangementTest.java | 0 .../components/runtime/TextBoxTest.java | 0 .../components/runtime/TextingTest.java | 0 .../components/runtime/ToggleTestBase.java | 0 .../components/runtime/WebTest.java | 0 .../components/runtime/WebViewerTest.java | 0 .../runtime/repltest/FileReplTest.java | 0 .../runtime/shadows/ShadowActivityCompat.java | 0 .../runtime/shadows/ShadowAsynchUtil.java | 0 .../shadows/ShadowEventDispatcher.java | 0 .../ShadowMapTileModuleProviderBase.java | 0 .../tileprovider/util/ShadowStorageUtils.java | 0 .../org/osmdroid/views/ShadowMapView.java | 0 .../runtime/test/TestExtension.java | 0 .../runtime/util/BoundingBoxTest.java | 0 .../components/runtime/util/CsvUtilTest.java | 0 .../runtime/util/DataSourceUtilTest.java | 0 .../components/runtime/util/DatesTest.java | 0 .../runtime/util/DummyMapControllerTest.java | 0 .../components/runtime/util/FileUtilTest.java | 0 .../runtime/util/GameInstanceTest.java | 0 .../runtime/util/GeoJSONUtilTest.java | 0 .../runtime/util/GeometryUtilTest.java | 0 .../runtime/util/JavaStringUtilsTest.java | 0 .../components/runtime/util/JsonUtilTest.java | 0 .../runtime/util/MediaUtilTest.java | 0 .../util/OrientationSensorUtilTest.java | 0 .../runtime/util/PaintUtilTest.java | 0 .../runtime/util/PropertyUtilTest.java | 0 .../runtime/util/YailDictionaryTest.java | 0 .../components/runtime/util/YailListTest.java | 0 .../org/robolectric/annotation/Config.java | 0 ...ound_cache_hint_selector_material_dark.xml | 0 ...und_cache_hint_selector_material_light.xml | 0 ...c_btn_colored_borderless_text_material.xml | 0 .../color/abc_btn_colored_text_material.xml | 0 .../abc_hint_foreground_material_dark.xml | 0 .../abc_hint_foreground_material_light.xml | 0 ...rimary_text_disable_only_material_dark.xml | 0 ...imary_text_disable_only_material_light.xml | 0 .../color/abc_primary_text_material_dark.xml | 0 .../color/abc_primary_text_material_light.xml | 0 .../test}/res/color/abc_search_url_text.xml | 0 .../abc_secondary_text_material_dark.xml | 0 .../abc_secondary_text_material_light.xml | 0 .../res/color/abc_tint_btn_checkable.xml | 0 .../test}/res/color/abc_tint_default.xml | 0 .../test}/res/color/abc_tint_edittext.xml | 0 .../test}/res/color/abc_tint_seek_thumb.xml | 0 .../test}/res/color/abc_tint_spinner.xml | 0 .../test}/res/color/abc_tint_switch_track.xml | 0 .../res/color/switch_thumb_material_dark.xml | 0 .../res/color/switch_thumb_material_light.xml | 0 .../abc_ab_share_pack_mtrl_alpha.9.png | Bin .../abc_btn_check_to_on_mtrl_000.png | Bin .../abc_btn_check_to_on_mtrl_015.png | Bin .../abc_btn_radio_to_on_mtrl_000.png | Bin .../abc_btn_radio_to_on_mtrl_015.png | Bin .../abc_btn_switch_to_on_mtrl_00001.9.png | Bin .../abc_btn_switch_to_on_mtrl_00012.9.png | Bin .../abc_cab_background_top_mtrl_alpha.9.png | Bin .../abc_ic_commit_search_api_mtrl_alpha.png | Bin .../abc_ic_menu_copy_mtrl_am_alpha.png | Bin .../abc_ic_menu_cut_mtrl_alpha.png | Bin .../abc_ic_menu_paste_mtrl_am_alpha.png | Bin .../abc_ic_menu_selectall_mtrl_alpha.png | Bin .../abc_ic_menu_share_mtrl_alpha.png | Bin .../abc_ic_star_black_16dp.png | Bin .../abc_ic_star_black_36dp.png | Bin .../abc_ic_star_black_48dp.png | Bin .../abc_ic_star_half_black_16dp.png | Bin .../abc_ic_star_half_black_36dp.png | Bin .../abc_ic_star_half_black_48dp.png | Bin .../abc_list_divider_mtrl_alpha.9.png | Bin .../abc_list_focused_holo.9.png | Bin .../abc_list_longpressed_holo.9.png | Bin .../abc_list_pressed_holo_dark.9.png | Bin .../abc_list_pressed_holo_light.9.png | Bin ...abc_list_selector_disabled_holo_dark.9.png | Bin ...bc_list_selector_disabled_holo_light.9.png | Bin .../abc_menu_hardkey_panel_mtrl_mult.9.png | Bin .../abc_popup_background_mtrl_mult.9.png | Bin .../abc_scrubber_control_off_mtrl_alpha.png | Bin ...c_scrubber_control_to_pressed_mtrl_000.png | Bin ...c_scrubber_control_to_pressed_mtrl_005.png | Bin .../abc_scrubber_primary_mtrl_alpha.9.png | Bin .../abc_scrubber_track_mtrl_alpha.9.png | Bin .../abc_spinner_mtrl_am_alpha.9.png | Bin .../abc_switch_track_mtrl_alpha.9.png | Bin .../abc_tab_indicator_mtrl_alpha.9.png | Bin .../abc_text_select_handle_left_mtrl_dark.png | Bin ...abc_text_select_handle_left_mtrl_light.png | Bin ...bc_text_select_handle_middle_mtrl_dark.png | Bin ...c_text_select_handle_middle_mtrl_light.png | Bin ...abc_text_select_handle_right_mtrl_dark.png | Bin ...bc_text_select_handle_right_mtrl_light.png | Bin .../abc_textfield_activated_mtrl_alpha.9.png | Bin .../abc_textfield_default_mtrl_alpha.9.png | Bin ...extfield_search_activated_mtrl_alpha.9.png | Bin ..._textfield_search_default_mtrl_alpha.9.png | Bin .../ic_launcher_background.png | Bin .../notification_bg_low_normal.9.png | Bin .../notification_bg_low_pressed.9.png | Bin .../notification_bg_normal.9.png | Bin .../notification_bg_normal_pressed.9.png | Bin .../notify_panel_notification_icon_bg.png | Bin .../drawable-mdpi-v4/osm_ic_center_map.png | Bin .../res/drawable-mdpi-v4/osm_ic_follow_me.png | Bin .../drawable-mdpi-v4/osm_ic_follow_me_on.png | Bin .../drawable-mdpi-v4/osm_ic_ic_map_ortho.png | Bin .../abc_ab_share_pack_mtrl_alpha.9.png | Bin .../abc_btn_check_to_on_mtrl_000.png | Bin .../abc_btn_check_to_on_mtrl_015.png | Bin .../abc_btn_radio_to_on_mtrl_000.png | Bin .../abc_btn_radio_to_on_mtrl_015.png | Bin .../abc_btn_rating_star_off_mtrl_alpha.png | Bin .../abc_btn_rating_star_on_mtrl_alpha.png | Bin .../abc_btn_switch_to_on_mtrl_00001.9.png | Bin .../abc_btn_switch_to_on_mtrl_00012.9.png | Bin .../abc_cab_background_top_mtrl_alpha.9.png | Bin .../abc_ic_ab_back_mtrl_am_alpha.png | Bin .../drawable-mdpi/abc_ic_clear_mtrl_alpha.png | Bin .../abc_ic_commit_search_api_mtrl_alpha.png | Bin .../abc_ic_go_search_api_mtrl_alpha.png | Bin .../abc_ic_menu_copy_mtrl_am_alpha.png | Bin .../abc_ic_menu_cut_mtrl_alpha.png | Bin .../abc_ic_menu_moreoverflow_mtrl_alpha.png | Bin .../abc_ic_menu_paste_mtrl_am_alpha.png | Bin .../abc_ic_menu_selectall_mtrl_alpha.png | Bin .../abc_ic_menu_share_mtrl_alpha.png | Bin .../abc_ic_search_api_mtrl_alpha.png | Bin .../abc_ic_voice_search_api_mtrl_alpha.png | Bin .../abc_list_divider_mtrl_alpha.9.png | Bin .../drawable-mdpi/abc_list_focused_holo.9.png | Bin .../abc_list_longpressed_holo.9.png | Bin .../abc_list_pressed_holo_dark.9.png | Bin .../abc_list_pressed_holo_light.9.png | Bin ...abc_list_selector_disabled_holo_dark.9.png | Bin ...bc_list_selector_disabled_holo_light.9.png | Bin .../abc_menu_hardkey_panel_mtrl_mult.9.png | Bin .../abc_popup_background_mtrl_mult.9.png | Bin .../abc_spinner_mtrl_am_alpha.9.png | Bin .../abc_switch_track_mtrl_alpha.9.png | Bin .../abc_tab_indicator_mtrl_alpha.9.png | Bin .../abc_text_cursor_mtrl_alpha.9.png | Bin .../abc_textfield_activated_mtrl_alpha.9.png | Bin .../abc_textfield_default_mtrl_alpha.9.png | Bin ...extfield_search_activated_mtrl_alpha.9.png | Bin ..._textfield_search_default_mtrl_alpha.9.png | Bin .../drawable/abc_btn_borderless_material.xml | 0 .../res/drawable/abc_btn_check_material.xml | 0 .../res/drawable/abc_btn_colored_material.xml | 0 .../drawable/abc_btn_default_mtrl_shape.xml | 0 .../res/drawable/abc_btn_radio_material.xml | 0 .../abc_cab_background_internal_bg.xml | 0 .../abc_cab_background_top_material.xml | 0 .../abc_dialog_material_background.xml | 0 .../abc_dialog_material_background_dark.xml | 0 .../abc_dialog_material_background_light.xml | 0 .../res/drawable/abc_edit_text_material.xml | 0 .../res/drawable/abc_ic_ab_back_material.xml | 0 .../abc_ic_arrow_drop_right_black_24dp.xml | 0 .../res/drawable/abc_ic_clear_material.xml | 0 .../abc_ic_go_search_api_material.xml | 0 .../abc_ic_menu_overflow_material.xml | 0 .../drawable/abc_ic_search_api_material.xml | 0 .../abc_ic_voice_search_api_material.xml | 0 .../abc_item_background_holo_dark.xml | 0 .../abc_item_background_holo_light.xml | 0 ...lector_background_transition_holo_dark.xml | 0 ...ector_background_transition_holo_light.xml | 0 .../drawable/abc_list_selector_holo_dark.xml | 0 .../drawable/abc_list_selector_holo_light.xml | 0 .../drawable/abc_ratingbar_full_material.xml | 0 .../abc_ratingbar_indicator_material.xml | 0 .../res/drawable/abc_ratingbar_material.xml | 0 .../drawable/abc_ratingbar_small_material.xml | 0 .../drawable/abc_seekbar_thumb_material.xml | 0 .../abc_seekbar_tick_mark_material.xml | 0 .../drawable/abc_seekbar_track_material.xml | 0 ..._spinner_textfield_background_material.xml | 0 .../drawable/abc_switch_thumb_material.xml | 0 .../drawable/abc_tab_indicator_material.xml | 0 .../res/drawable/abc_text_cursor_material.xml | 0 .../abc_textfield_search_material.xml | 0 .../test}/res/drawable/abc_vector_test.xml | 0 .../test}/res/drawable/bonuspack_bubble.9.png | Bin .../test}/res/drawable/btn_moreinfo.xml | 0 .../test}/res/drawable/center.png | Bin .../test}/res/drawable/direction_arrow.png | Bin .../test}/res/drawable/ic_menu_compass.png | Bin .../test}/res/drawable/ic_menu_mapmode.png | Bin .../test}/res/drawable/ic_menu_mylocation.png | Bin .../test}/res/drawable/ic_menu_offline.png | Bin .../test}/res/drawable/marker_default.png | Bin .../drawable/marker_default_focused_base.png | Bin .../test}/res/drawable/moreinfo_arrow.png | Bin .../res/drawable/moreinfo_arrow_pressed.png | Bin .../test}/res/drawable/navto_small.png | Bin .../{tests => src/test}/res/drawable/next.png | Bin .../test}/res/drawable/person.png | Bin .../test}/res/drawable/previous.png | Bin .../test}/res/drawable/tooltip_frame_dark.xml | 0 .../res/drawable/tooltip_frame_light.xml | 0 .../test}/res/drawable/zoom_in.png | Bin .../test}/res/drawable/zoom_out.png | Bin .../res/layout/abc_action_bar_title_item.xml | 0 .../layout/abc_action_bar_up_container.xml | 0 .../abc_action_bar_view_list_nav_layout.xml | 0 .../layout/abc_action_menu_item_layout.xml | 0 .../res/layout/abc_action_menu_layout.xml | 0 .../test}/res/layout/abc_action_mode_bar.xml | 0 .../abc_action_mode_close_item_material.xml | 0 .../res/layout/abc_activity_chooser_view.xml | 0 .../abc_activity_chooser_view_list_item.xml | 0 .../res/layout/abc_alert_dialog_material.xml | 0 .../res/layout/abc_dialog_title_material.xml | 0 .../res/layout/abc_expanded_menu_layout.xml | 0 .../layout/abc_list_menu_item_checkbox.xml | 0 .../res/layout/abc_list_menu_item_icon.xml | 0 .../res/layout/abc_list_menu_item_layout.xml | 0 .../res/layout/abc_list_menu_item_radio.xml | 0 .../res/layout/abc_popup_menu_item_layout.xml | 0 .../res/layout/abc_screen_content_include.xml | 0 .../test}/res/layout/abc_screen_simple.xml | 0 .../abc_screen_simple_overlay_action_mode.xml | 0 .../test}/res/layout/abc_screen_toolbar.xml | 0 .../abc_search_dropdown_item_icons_2line.xml | 0 .../test}/res/layout/abc_search_view.xml | 0 .../res/layout/abc_select_dialog_material.xml | 0 .../res/layout/abc_simple_dropdown_hint.xml | 0 .../test}/res/layout/activity_main.xml | Bin .../test}/res/layout/bonuspack_bubble.xml | 0 .../res/layout/notification_media_action.xml | 0 .../notification_media_cancel_action.xml | 0 .../notification_template_big_media.xml | 0 ...notification_template_big_media_narrow.xml | 0 .../layout/notification_template_lines.xml | 0 .../layout/notification_template_media.xml | 0 ...notification_template_part_chronometer.xml | 0 .../notification_template_part_time.xml | 0 .../layout/select_dialog_item_material.xml | 0 .../select_dialog_multichoice_material.xml | 0 .../select_dialog_singlechoice_material.xml | 0 .../support_simple_spinner_dropdown_item.xml | 0 .../{tests => src/test}/res/values/values.xml | 0 appinventor/components/tests/README.md | 7 - 670 files changed, 1615 insertions(+), 1666 deletions(-) delete mode 100644 appinventor/appengine/src/com/google/appinventor/images/delete.png rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/AabCompiler.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/AnimationXmlConstants.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/BuildServer.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/Compiler.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/DexExecTask.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/Execution.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/FormPropertiesAnalyzer.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/Main.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/NonQueuingExecutor.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/PathUtil.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/Project.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/ProjectBuilder.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/Result.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/Signatures.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/YoungAndroidConstants.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/package-info.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/resources/runtime.scm (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/resources/ya.png (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/stats/NullStatReporter.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/stats/SimpleStatReporter.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/stats/StatCalculator.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/stats/StatReporter.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/util/AARLibraries.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/util/AARLibrary.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/util/AabZipper.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/util/BaseFileWrapper.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/util/BaseLogger.java (100%) rename appinventor/buildserver/src/{ => main/java}/com/google/appinventor/buildserver/util/NOPCompilationProgress.java (100%) rename appinventor/buildserver/{tests => src/test/java}/com/google/appinventor/buildserver/CompilerTest.java (100%) rename appinventor/buildserver/{tests => src/test/java}/com/google/appinventor/buildserver/FormPropertiesAnalyzerTest.java (100%) rename appinventor/buildserver/{tests => src/test/java}/com/google/appinventor/buildserver/NonQueuingExecutorTest.java (100%) rename appinventor/buildserver/{tests => src/test/java}/com/google/appinventor/buildserver/YailAndroidTest.java (100%) rename appinventor/buildserver/{tests => src/test/java}/com/google/appinventor/buildserver/YailEvalTest.java (99%) rename appinventor/buildserver/{tests => src/test/java}/com/google/appinventor/buildserver/YailEvalTest.scm (100%) rename appinventor/buildserver/{tests => src/test/java}/com/google/appinventor/buildserver/testComponentsAsDictKeys.scm (100%) rename appinventor/common-utils/{src/com/google/appinventor/common => }/CommonUtils.gwt.xml (100%) rename appinventor/common-utils/src/{ => main/java}/com/google/appinventor/common/utils/FilenameUtils.java (100%) rename appinventor/common-utils/src/{ => main/java}/com/google/appinventor/common/utils/StringUtils.java (100%) rename appinventor/common-utils/{tests => src/test/java}/com/google/appinventor/common/utils/FilenameUtilsTest.java (100%) rename appinventor/common-utils/{tests => src/test/java}/com/google/appinventor/common/utils/StringUtilsTest.java (100%) rename appinventor/common-version/{src/com/google/appinventor/common => }/CommonVersion.gwt.xml (100%) rename appinventor/common-version/src/{ => main/java}/com/google/appinventor/common/testutils/TestUtils.java (100%) rename appinventor/common-version/src/{ => main/java}/com/google/appinventor/common/testutils/package-info.java (100%) rename appinventor/common-version/src/{ => main/java}/com/google/appinventor/common/version/AppInventorFeatures.java (100%) rename appinventor/common-version/src/{ => main/java}/com/google/appinventor/common/version/package-info.java (100%) rename appinventor/{components/src => component-annotations/src/main/resources}/META-INF/services/javax.annotation.processing.Processor (100%) rename appinventor/component-constants/{src/main/java/com/google/appinventor/components => }/CommonConstants.gwt.xml (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/ChartType.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/LineType.java (100%) rename appinventor/{components/src => component-constants/src/main/java}/com/google/appinventor/components/common/PointStyle.java (100%) rename appinventor/{components/tests => component-constants/src/test/java}/com/google/appinventor/components/common/HtmlEntitiesTest.java (100%) delete mode 100644 appinventor/components/src/com/google/appinventor/components/runtime/util/NativeOpenStreetMapController.java rename appinventor/components/src/{ => main}/AndroidManifest.xml (53%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/AccelerometerSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/AccessibleComponent.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ActivityResultListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ActivityStarter.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/AlarmHandler.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/AndroidNonvisibleComponent.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/AndroidViewComponent.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/AppInventorCompatActivity.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/AreaChartDataModel.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/AreaChartView.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/AxisChartView.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Ball.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/BarChartDataModel.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/BarChartView.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/BarcodeScanner.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Barometer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/BluetoothClient.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/BluetoothConnectionBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/BluetoothConnectionListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/BluetoothServer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/BufferedSingleValueSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Button.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ButtonBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Camcorder.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Camera.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Canvas.java (100%) mode change 100755 => 100644 rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Chart.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Chart2DDataModel.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ChartData2D.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ChartDataBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ChartDataModel.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ChartView.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/CheckBox.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Circle.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Clock.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/CloudDB.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Component.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ComponentContainer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ContactPicker.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/DataFile.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/DataSource.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/DataSourceChangeListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/DatePicker.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Deleteable.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/EmailAddressAdapter.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/EmailPicker.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Ev3ColorSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Ev3Commands.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Ev3GyroSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Ev3Motors.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Ev3Sound.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Ev3TouchSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Ev3UI.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Ev3UltrasonicSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/EventDispatcher.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/FeatureCollection.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/File.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/FileBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/FirebaseDB.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Form.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/FusiontablesControl.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/GameClient.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/GyroscopeSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/HVArrangement.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/HandlesEventDispatching.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/HorizontalArrangement.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/HorizontalScrollArrangement.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Hygrometer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Image.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ImagePicker.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ImageSprite.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/IntentBasedSpeechRecognizer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Label.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Layout.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LegoMindstormsEv3Base.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LegoMindstormsEv3Sensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LegoMindstormsNxtBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LegoMindstormsNxtSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LightSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LineChartBaseDataModel.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LineChartDataModel.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LineChartView.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LineChartViewBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LineString.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LinearLayout.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ListAdapterWithRecyclerView.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ListPicker.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ListPickerActivity.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ListView.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/LocationSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/MagneticFieldSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Map.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/MapFeatureBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/MapFeatureBaseWithFill.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/MapFeatureContainerBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Marker.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/MediaStore.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Navigation.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/NearField.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Notifier.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/NxtColorSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/NxtDirectCommands.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/NxtDrive.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/NxtLightSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/NxtSoundSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/NxtTouchSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/NxtUltrasonicSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ObservableDataSource.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OnClearListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OnCreateOptionsMenuListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OnDestroyListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OnNewIntentListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OnOptionsItemSelectedListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OnOrientationChangeListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OnPauseListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OnResumeListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OnStopListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OptionHelper.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/OrientationSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/PasswordTextBox.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Pedometer.java (100%) mode change 100755 => 100644 rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/PermissionResultHandler.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/PhoneCall.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/PhoneNumberPicker.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/PhoneStatus.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Picker.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/PieChartDataModel.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/PieChartView.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Player.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/PointChartDataModel.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/PointChartView.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Polygon.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/PolygonBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ProximitySensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/RealTimeDataSource.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Rectangle.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ReplApplication.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ReplForm.java (99%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ScaledFrameLayout.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ScatterChartDataModel.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ScatterChartView.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/SensorComponent.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Serial.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ServiceBasedSpeechRecognizer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Sharing.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/SingleValueSensor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Slider.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Sound.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/SoundRecorder.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/SpeechListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/SpeechRecognizer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/SpeechRecognizerController.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Spinner.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/SplashActivity.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Spreadsheet.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Sprite.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Switch.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/TableArrangement.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/TableLayout.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/TextBox.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/TextBoxBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/TextToSpeech.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Texting.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Thermometer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/TimePicker.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/TinyDB.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/TinyWebDB.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/ToggleBase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Translator.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Twitter.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/VerticalArrangement.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/VerticalScrollArrangement.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/VideoPlayer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/VisibleComponent.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Voting.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/Web.java (98%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/WebViewActivity.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/WebViewer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/YandexTranslate.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/collect/Lists.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/collect/Maps.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/collect/Sets.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/collect/package-info.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/ArrayIndexOutOfBoundsError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/AssertionFailure.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/ConversionError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/DispatchableError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/FileAlreadyExistsError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/FileIOError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/IllegalArgumentError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/IterationError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/NoSuchFileError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/PermissionException.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/RequestTimeoutException.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/RuntimeError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/StopBlocksExecution.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/UninitializedInstanceError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/UnknownFileHandleError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/YailRuntimeError.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/errors/package-info.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/multidex/MultiDex.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/multidex/MultiDexApplication.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/multidex/MultiDexExtractor.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/multidex/ZipEntryReader.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/multidex/ZipUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/package-info.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/translate/TranslatorToken.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/translate/tr.proto (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/AccountChooser.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/AlignmentUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/AnimationUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/AppInvHTTPD.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/AssetFetcher.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/AsyncCallbackFacade.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/AsyncCallbackPair.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/AsynchUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/Base58Util.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/BiggerFuture.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/BluetoothReflection.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/BoundingBox.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/BulkPermissionRequest.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ChartDataSourceUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ClientLoginHelper.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/CloudDBJedisListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/CompositeFileOperation.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/Continuation.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ContinuationUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/CsvUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/CustomMediaController.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/Dates.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/DonutUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/DummyMapController.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/EclairUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ElementsUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ErrorMessages.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/Ev3BinaryParser.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/Ev3Constants.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ExternalTextToSpeech.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FileAccessMode.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FileOperation.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FileReadOperation.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FileStreamOperation.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FileStreamReadOperation.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FileStreamWriteOperation.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FileUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FileWriteOperation.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FroyoUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FroyoWebViewClient.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/FullScreenVideoUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/GameInstance.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/GeoJSONUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/GeometryUtil.java (99%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/GingerbreadUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/HashDatabase.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/HashDbInitialize.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/HashFile.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/HoneycombMR1Util.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/HoneycombUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/HoneycombWebViewClient.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/IClientLoginHelper.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/IOUtils.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ITextToSpeech.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/IceCreamSandwichUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ImageViewUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/InternalTextToSpeech.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/JavaStringUtils.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/JellybeanUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/JsonUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/KitkatUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ListViewArrayAdapterImageSingleText.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ListViewArrayAdapterImageTwoText.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ListViewArrayAdapterSingleText.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ListViewArrayAdapterTwoText.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ListViewArrayAdapterTwoTextLinear.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/LollipopUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/MapFactory.java (99%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/MediaUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/MemoryLeakUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/NanoHTTPD.java (100%) create mode 100644 appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/NativeOpenStreetMapController.java rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/NougatUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/OAuth2Helper.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/OnInitializeListener.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/OrientationSensorUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/PaintUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/PhoneCallUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/PlayerListDelta.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/PropertyUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/QUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/RUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/RetValManager.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/RuntimeErrorAlert.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ScopedFile.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ScreenDensityUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/SdkLevel.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/SingleFileOperation.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/SmsBroadcastReceiver.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/Synchronizer.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/TelnetRepl.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/TextViewUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/TimerInternal.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/TypeUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/ViewUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/WebRTCNativeMgr.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/WebServiceUtil.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/XmlParser.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/YailConstants.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/YailDictionary.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/YailList.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/YailNumberToString.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/YailObject.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/package-info.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/theme/ClassicThemeHelper.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/theme/HoneycombThemeHelper.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/theme/IceCreamSandwichThemeHelper.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/util/theme/ThemeHelper.java (100%) rename appinventor/components/src/{ => main/java}/com/google/appinventor/components/runtime/view/ZoomControlView.java (100%) rename appinventor/components/{tests => src/test}/AndroidManifest.xml (100%) rename appinventor/components/{tests => src/test}/assets/com.google.appinventor.components.runtime.test/test.txt (100%) rename appinventor/components/{tests => src/test}/assets/com.google.appinventor.components.runtime.test/usa-new-england.geojson (100%) rename appinventor/components/{tests => src/test}/assets/marker.svg (100%) rename appinventor/components/{tests => src/test}/assets/test.txt (100%) rename appinventor/components/{tests => src/test}/assets/testCsv.csv (100%) rename appinventor/components/{tests => src/test}/assets/testCsv2Rows.csv (100%) rename appinventor/components/{tests => src/test}/assets/testJson.json (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/AbstractAxisChartTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/AbstractChartDataModel2DTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/AbstractChartDataModelBaseTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/AbstractChartTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/AbstractPointChartDataModelTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/AreaChartDataModelTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/AreaChartTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/BarChartDataModelTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/BarChartTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/BluetoothConnectionBaseTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/ChartData2DTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/CheckboxTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/CircleTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/ClockTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/DataFileTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/FeatureCollectionTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/FileTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/FileTestBase.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/FormTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/LabelTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/LegoMindstormsNxtBaseTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/LineChartDataModelTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/LineChartTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/LineStringTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/ListViewTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/MapDistanceTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/MapTest.java (99%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/MapTestBase.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/MarkerTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/OrientationSensorTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/PieChartDataModelTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/PieChartTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/PolygonTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/RectangleTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/ReplFormTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/RobolectricTestBase.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/ScatterChartDataModelTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/ScatterChartTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/SpriteTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/SwitchTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/TableArrangementTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/TextBoxTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/TextingTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/ToggleTestBase.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/WebTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/WebViewerTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/repltest/FileReplTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/shadows/ShadowActivityCompat.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/shadows/ShadowAsynchUtil.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/shadows/ShadowEventDispatcher.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/shadows/org/osmdroid/tileprovider/modules/ShadowMapTileModuleProviderBase.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/shadows/org/osmdroid/tileprovider/util/ShadowStorageUtils.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/shadows/org/osmdroid/views/ShadowMapView.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/test/TestExtension.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/BoundingBoxTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/CsvUtilTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/DataSourceUtilTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/DatesTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/DummyMapControllerTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/FileUtilTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/GameInstanceTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/GeoJSONUtilTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/GeometryUtilTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/JavaStringUtilsTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/JsonUtilTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/MediaUtilTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/OrientationSensorUtilTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/PaintUtilTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/PropertyUtilTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/YailDictionaryTest.java (100%) rename appinventor/components/{tests => src/test/java}/com/google/appinventor/components/runtime/util/YailListTest.java (100%) rename appinventor/components/{tests => src/test/java}/org/robolectric/annotation/Config.java (100%) rename appinventor/components/{tests => src/test}/res/color/abc_background_cache_hint_selector_material_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_background_cache_hint_selector_material_light.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_btn_colored_borderless_text_material.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_btn_colored_text_material.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_hint_foreground_material_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_hint_foreground_material_light.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_primary_text_disable_only_material_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_primary_text_disable_only_material_light.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_primary_text_material_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_primary_text_material_light.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_search_url_text.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_secondary_text_material_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_secondary_text_material_light.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_tint_btn_checkable.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_tint_default.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_tint_edittext.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_tint_seek_thumb.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_tint_spinner.xml (100%) rename appinventor/components/{tests => src/test}/res/color/abc_tint_switch_track.xml (100%) rename appinventor/components/{tests => src/test}/res/color/switch_thumb_material_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/color/switch_thumb_material_light.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_star_black_16dp.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_star_black_36dp.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_star_black_48dp.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_list_focused_holo.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/ic_launcher_background.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/notification_bg_low_normal.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/notification_bg_low_pressed.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/notification_bg_normal.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/osm_ic_center_map.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/osm_ic_follow_me.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/osm_ic_follow_me_on.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi-v4/osm_ic_ic_map_ortho.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ab_share_pack_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_btn_check_to_on_mtrl_000.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_btn_check_to_on_mtrl_015.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_btn_radio_to_on_mtrl_000.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_btn_radio_to_on_mtrl_015.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_btn_rating_star_off_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_btn_rating_star_on_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_btn_switch_to_on_mtrl_00001.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_btn_switch_to_on_mtrl_00012.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_cab_background_top_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_ab_back_mtrl_am_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_clear_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_commit_search_api_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_go_search_api_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_menu_copy_mtrl_am_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_menu_cut_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_menu_moreoverflow_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_menu_paste_mtrl_am_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_menu_selectall_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_menu_share_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_search_api_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_ic_voice_search_api_mtrl_alpha.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_list_divider_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_list_focused_holo.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_list_longpressed_holo.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_list_pressed_holo_dark.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_list_pressed_holo_light.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_list_selector_disabled_holo_dark.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_list_selector_disabled_holo_light.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_menu_hardkey_panel_mtrl_mult.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_popup_background_mtrl_mult.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_spinner_mtrl_am_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_switch_track_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_tab_indicator_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_text_cursor_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_textfield_activated_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_textfield_default_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_textfield_search_activated_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable-mdpi/abc_textfield_search_default_mtrl_alpha.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_btn_borderless_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_btn_check_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_btn_colored_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_btn_default_mtrl_shape.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_btn_radio_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_cab_background_internal_bg.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_cab_background_top_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_dialog_material_background.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_dialog_material_background_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_dialog_material_background_light.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_edit_text_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ic_ab_back_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ic_arrow_drop_right_black_24dp.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ic_clear_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ic_go_search_api_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ic_menu_overflow_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ic_search_api_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ic_voice_search_api_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_item_background_holo_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_item_background_holo_light.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_list_selector_background_transition_holo_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_list_selector_background_transition_holo_light.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_list_selector_holo_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_list_selector_holo_light.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ratingbar_full_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ratingbar_indicator_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ratingbar_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_ratingbar_small_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_seekbar_thumb_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_seekbar_tick_mark_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_seekbar_track_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_spinner_textfield_background_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_switch_thumb_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_tab_indicator_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_text_cursor_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_textfield_search_material.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/abc_vector_test.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/bonuspack_bubble.9.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/btn_moreinfo.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/center.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/direction_arrow.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/ic_menu_compass.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/ic_menu_mapmode.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/ic_menu_mylocation.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/ic_menu_offline.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/marker_default.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/marker_default_focused_base.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/moreinfo_arrow.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/moreinfo_arrow_pressed.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/navto_small.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/next.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/person.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/previous.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/tooltip_frame_dark.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/tooltip_frame_light.xml (100%) rename appinventor/components/{tests => src/test}/res/drawable/zoom_in.png (100%) rename appinventor/components/{tests => src/test}/res/drawable/zoom_out.png (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_action_bar_title_item.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_action_bar_up_container.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_action_bar_view_list_nav_layout.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_action_menu_item_layout.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_action_menu_layout.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_action_mode_bar.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_action_mode_close_item_material.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_activity_chooser_view.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_activity_chooser_view_list_item.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_alert_dialog_material.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_dialog_title_material.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_expanded_menu_layout.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_list_menu_item_checkbox.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_list_menu_item_icon.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_list_menu_item_layout.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_list_menu_item_radio.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_popup_menu_item_layout.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_screen_content_include.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_screen_simple.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_screen_simple_overlay_action_mode.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_screen_toolbar.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_search_dropdown_item_icons_2line.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_search_view.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_select_dialog_material.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/abc_simple_dropdown_hint.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/activity_main.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/bonuspack_bubble.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/notification_media_action.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/notification_media_cancel_action.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/notification_template_big_media.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/notification_template_big_media_narrow.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/notification_template_lines.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/notification_template_media.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/notification_template_part_chronometer.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/notification_template_part_time.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/select_dialog_item_material.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/select_dialog_multichoice_material.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/select_dialog_singlechoice_material.xml (100%) rename appinventor/components/{tests => src/test}/res/layout/support_simple_spinner_dropdown_item.xml (100%) rename appinventor/components/{tests => src/test}/res/values/values.xml (100%) delete mode 100644 appinventor/components/tests/README.md diff --git a/appinventor/appengine/src/com/google/appinventor/images/delete.png b/appinventor/appengine/src/com/google/appinventor/images/delete.png deleted file mode 100644 index 62864f912d07ec7e96d4cc7908112fb845ad406c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n3BBRT^Rni_n+Ah4nJ za0`Jj;Gn@pc-r)0WwqH{6GScqHIZJ(+e*sM0 z>qBlOK9ifo6SVr=H`~&UdF(YeZYWgb|I@WpusHFQ>E5jRu=#73x~HGl{da7dw^L@) zg eventListeners = new HashSet(); - private Map featureOverlays = new HashMap(); - private SVG defaultMarkerSVG = null; - private TouchOverlay touch = null; - private OverlayInfoWindow defaultInfoWindow = null; - private boolean ready = false; - private ZoomControlView zoomControls = null; - private float lastAzimuth = Float.NaN; - private ScaleBarOverlay scaleBar; - - /** - * This set stores feature collections that are hidden (Visible = False). - */ - private Set hiddenFeatureCollections = new HashSet<>(); - - /** - * This set stores the features contained within feature collections captured by - * {@link #hiddenFeatureCollections}. This is used to test whether the features should be - * displayed when toggling their Visible property. - */ - private Set hiddenFeatures = new HashSet<>(); - - private static final float[] ANCHOR_HORIZONTAL = { Float.NaN, 0.0f, 1.0f, 0.5f }; - private static final float[] ANCHOR_VERTICAL = { Float.NaN, 0.0f, 0.5f, 1.0f }; - - private static class AppInventorLocationSensorAdapter implements IMyLocationProvider, - LocationSensor.LocationSensorListener { - private LocationSensor source; - private Location lastLocation; - private IMyLocationConsumer consumer; - private boolean enabled = false; - - @Override - public void setSource(LocationSensor source) { - if (this.source == source) { - return; // nothing to do here - } - if (this.source != null) { - this.source.Enabled(false); - } - this.source = source; - if (this.source != null) { - this.source.Enabled(enabled); - } - } - - @Override - public void onTimeIntervalChanged(int time) { - } - - @Override - public void onDistanceIntervalChanged(int distance) { - } - - @Override - public void onLocationChanged(Location location) { - lastLocation = location; - if (consumer != null) { - consumer.onLocationChanged(location, this); - } - } - - @Override - public void onStatusChanged(String s, int i, Bundle bundle) { - } - - @Override - public void onProviderEnabled(String s) { - } - - @Override - public void onProviderDisabled(String s) { - } - - @Override - public boolean startLocationProvider(IMyLocationConsumer consumer) { - this.consumer = consumer; - if (source != null) { - source.Enabled(true); - enabled = true; - } - return enabled; - } - - @Override - public void stopLocationProvider() { - if (source != null) { - source.Enabled(false); - } - enabled = false; - } - - @Override - public Location getLastKnownLocation() { - return lastLocation; - } - - @Override - public void destroy() { - this.consumer = null; - } - } - - private class TouchOverlay extends Overlay { - private boolean scrollEnabled = true; - - @Override - public void draw(Canvas arg0, MapView arg1, boolean arg2) {} - - @Override - public boolean onFling(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY, MapView mapView) { - return !scrollEnabled; - } - - @Override - public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY, MapView mapView) { - return !scrollEnabled; - } - - @Override - public boolean onLongPress(final MotionEvent pEvent, final MapView pMapView) { - IGeoPoint p = pMapView.getProjection().fromPixels((int) pEvent.getX(), (int) pEvent.getY()); - final double lat = p.getLatitude(); - final double lng = p.getLongitude(); - for (MapEventListener l : eventListeners) { - l.onLongPress(lat, lng); - } - return false; // We don't want to cancel propagation to other overlays - } - } - - private class MapReadyHandler extends Handler { - - @Override - public void handleMessage(final Message msg) { - switch (msg.what) { - case MapTile.MAPTILE_SUCCESS_ID: - if (!ready && form.canDispatchEvent(null, "MapReady")) { - ready = true; - form.runOnUiThread(new Runnable() { - @Override - public void run() { - for (MapEventListener l : eventListeners) { - l.onReady(NativeOpenStreetMapController.this); - } - } - }); - } - view.invalidate(); - break; - } - } - } - - private class CustomMapView extends MapView { - public CustomMapView(Context context) { - super(context, null, new MapReadyHandler()); - } - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - scrollTo(getScrollX() + (oldw - w) / 2, getScrollY() + (oldh - h) / 2); - super.onSizeChanged(w, h, oldw, oldh); - } - - @Override - public void onDetach() { - // Suppress call to parent onDetach - } - } - - private final AppInventorLocationSensorAdapter locationProvider; - - NativeOpenStreetMapController(final Form form) { - OpenStreetMapTileProviderConstants.setUserAgentValue(form.getApplication().getPackageName()); - File osmdroid = new File(form.getCacheDir(), "osmdroid"); - if (osmdroid.exists() || osmdroid.mkdirs()) { - Configuration.getInstance().setOsmdroidBasePath(osmdroid); - File osmdroidTiles = new File(osmdroid, "tiles"); - if (osmdroidTiles.exists() || osmdroidTiles.mkdirs()) { - Configuration.getInstance().setOsmdroidTileCache(osmdroidTiles); - caches = true; - } - } - this.form = form; - this.touch = new TouchOverlay(); - view = new CustomMapView(form.getApplicationContext()); - locationProvider = new AppInventorLocationSensorAdapter(); - defaultInfoWindow = new OverlayInfoWindow(view); - view.setTilesScaledToDpi(true); - view.setMapListener(this); - view.getOverlayManager().add(new CopyrightOverlay(form)); - view.getOverlayManager().add(touch); - view.addOnTapListener(new OnTapListener() { - @Override - public void onSingleTap(MapView view, double latitude, double longitude) { - for (MapEventListener listener : eventListeners) { - listener.onSingleTap(latitude, longitude); - } - } - - @Override - public void onDoubleTap(MapView view, double latitude, double longitude) { - for (MapEventListener listener : eventListeners) { - listener.onDoubleTap(latitude, longitude); - } - } - }); - zoomControls = new ZoomControlView(view); - userLocation = new MyLocationNewOverlay(locationProvider, view); - scaleBar = new ScaleBarOverlay(view); - scaleBar.setAlignBottom(true); - scaleBar.setAlignRight(true); - scaleBar.disableScaleBar(); - view.getOverlayManager().add(scaleBar); - - containerView = new RelativeLayout(form); - containerView.setClipChildren(true); - containerView.addView(view, new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - containerView.addView(zoomControls); - zoomControls.setVisibility(View.GONE); // not shown by default - } - - @Override - public View getView() { - return containerView; - } - - @Override - public double getLatitude() { - return view.getMapCenter().getLatitude(); - } - - @Override - public double getLongitude() { - return view.getMapCenter().getLongitude(); - } - - @Override - public void setCenter(double latitude, double longitude) { - view.getController().setCenter(new GeoPoint(latitude, longitude)); - } - - @Override - public void setZoom(int zoom) { - view.getController().setZoom((double) zoom); - zoomControls.updateButtons(); - } - - @Override - public int getZoom() { - // We pass pending as true here so that when a user sets ZoomLevel - // and then reads it back it should be reflected. - return (int) view.getZoomLevel(true); - } - - @Override - public void setZoomEnabled(boolean enable) { - this.zoomEnabled = enable; - view.setMultiTouchControls(enable); - } - - @Override - public boolean isZoomEnabled() { - return zoomEnabled; - } - - @Override - public void setMapType(MapFactory.MapType type) { - MapType mapType = MapType.fromUnderlyingValue(type.ordinal()); - if (mapType != null) { - setMapTypeAbstract(mapType); - } - } - - @Override - public MapFactory.MapType getMapType() { - return MapFactory.MapType.values()[tileType.toUnderlyingValue()]; - } - - @Override - public void setMapTypeAbstract(MapType type) { - tileType = type; - switch (type) { - case Road: - view.setTileSource(TileSourceFactory.MAPNIK); - break; - case Aerial: - view.setTileSource(TileSourceFactory.USGS_SAT); - break; - case Terrain: - view.setTileSource(TileSourceFactory.USGS_TOPO); - break; - } - } - - @Override - public MapType getMapTypeAbstract() { - return tileType; - } - - @Override - public void setCompassEnabled(boolean enabled) { - if (enabled && compass == null) { - compass = new CompassOverlay(view.getContext(), view); - view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { - @Override - public boolean onPreDraw() { - float density = view.getContext().getResources().getDisplayMetrics().density; - compass.setCompassCenter(view.getMeasuredWidth() / density - 35, 35); - return true; - } - }); - view.getOverlayManager().add(compass); - } - if (compass != null) { - if (enabled) { - if (compass.getOrientationProvider() != null) { - compass.enableCompass(); - } else { - compass.enableCompass(new InternalCompassOrientationProvider(view.getContext())); - } - compass.onOrientationChanged(lastAzimuth, null); - } else { - lastAzimuth = compass.getOrientation(); - compass.disableCompass(); - } - } - } - - @Override - public boolean isCompassEnabled() { - return compass != null && compass.isCompassEnabled(); - } - - @Override - public void setZoomControlEnabled(boolean enabled) { - if (zoomControlEnabled != enabled) { - zoomControls.setVisibility(enabled ? View.VISIBLE : View.GONE); - zoomControlEnabled = enabled; - containerView.invalidate(); - } - } - - @Override - public boolean isZoomControlEnabled() { - return zoomControlEnabled; - } - - @Override - public void setShowUserEnabled(boolean enable) { - userLocation.setEnabled(enable); - if (enable) { - userLocation.enableMyLocation(); - view.getOverlayManager().add( userLocation ); - } else { - userLocation.disableMyLocation(); - view.getOverlayManager().remove( userLocation ); - } - } - - @Override - public boolean isShowUserEnabled() { - return userLocation != null && userLocation.isEnabled(); - } - - @Override - public void setRotationEnabled(boolean enabled) { - if (enabled && rotation == null) { - rotation = new RotationGestureOverlay(view); - } - if (rotation != null) { - rotation.setEnabled(enabled); - if (enabled) { - view.getOverlayManager().add( rotation ); - } else { - view.getOverlayManager().remove( rotation ); - } - } - } - - @Override - public boolean isRotationEnabled() { - return rotation != null && rotation.isEnabled(); - } - - @Override - public void setPanEnabled(boolean enable) { - touch.scrollEnabled = enable; - } - - @Override - public boolean isPanEnabled() { - return touch.scrollEnabled; - } - - @Override - public void panTo(double latitude, double longitude, int zoom, double seconds) { - view.getController().animateTo(new GeoPoint(latitude, longitude)); - if (view.getController().zoomTo((double) zoom)) { - Animation animation = view.getAnimation(); - if (animation != null) { - animation.setDuration((long) (1000 * seconds)); - } - } - } - - @Override - public void addEventListener(MapEventListener listener) { - eventListeners.add(listener); - if ((ready || ViewCompat.isAttachedToWindow(view)) && form.canDispatchEvent(null, "MapReady")) { - ready = true; - listener.onReady(this); - } - } - - @Override - public void addFeature(final MapMarker aiMarker) { - createNativeMarker(aiMarker, new AsyncCallbackPair() { - @Override - public void onFailure(String message) { - Log.e(TAG, "Unable to create marker: " + message); - } - - @Override - public void onSuccess(Marker overlay) { - overlay.setOnMarkerClickListener(new OnMarkerClickListener() { - @Override - public boolean onMarkerClick(Marker marker, MapView mapView) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureClick(aiMarker); - } - if (aiMarker.EnableInfobox()) { - marker.showInfoWindow(); - } - return false; - } - @Override - public boolean onMarkerLongPress(Marker marker, MapView mapView) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureLongPress(aiMarker); - } - return false; - } - }); - overlay.setOnMarkerDragListener(new OnMarkerDragListener() { - @Override - public void onMarkerDrag(Marker marker) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureDrag(aiMarker); - } - } - - @Override - public void onMarkerDragEnd(Marker marker) { - IGeoPoint point = marker.getPosition(); - aiMarker.updateLocation(point.getLatitude(), point.getLongitude()); - for (MapEventListener listener : eventListeners) { - listener.onFeatureStopDrag(aiMarker); - } - } - - @Override - public void onMarkerDragStart(Marker marker) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureStartDrag(aiMarker); - } - } - }); - if (aiMarker.Visible()) { - showOverlay(overlay); - } else { - hideOverlay(overlay); - } - } - - }); - } - - @Override - public void addFeature(final MapLineString aiPolyline) { - Polyline polyline = createNativePolyline(aiPolyline); - featureOverlays.put(aiPolyline, polyline); - polyline.setOnClickListener(new Polyline.OnClickListener() { - @Override - public boolean onClick(Polyline arg0, MapView arg1, GeoPoint arg2) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureClick(aiPolyline); - } - if (aiPolyline.EnableInfobox()) { - arg0.showInfoWindow(arg2); - } - return true; - } - - @Override - public boolean onLongClick(Polyline arg0, MapView arg1, GeoPoint arg2) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureLongPress(aiPolyline); - } - return true; - } - }); - polyline.setOnDragListener(new Polyline.OnDragListener() { - @Override - public void onDragStart(Polyline polyline) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureStartDrag(aiPolyline); - } - } - - @Override - public void onDrag(Polyline polyline) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureDrag(aiPolyline); - } - } - - @Override - public void onDragEnd(Polyline polyline) { - aiPolyline.updatePoints(polyline.getPoints()); - for (MapEventListener listener : eventListeners) { - listener.onFeatureStopDrag(aiPolyline); - } - } - }); - if (aiPolyline.Visible()) { - showOverlay(polyline); - } else { - hideOverlay(polyline); - } - } - - private void configurePolygon(final MapFeature component, Polygon polygon) { - featureOverlays.put(component, polygon); - polygon.setOnClickListener(new Polygon.OnClickListener() { - @Override - public boolean onLongClick(Polygon arg0, MapView arg1, GeoPoint arg2) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureLongPress(component); - } - return true; - } - - @Override - public boolean onClick(Polygon arg0, MapView arg1, GeoPoint arg2) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureClick(component); - } - if (component.EnableInfobox()) { - arg0.showInfoWindow(arg2); - } - return true; - } - }); - polygon.setOnDragListener(new Polygon.OnDragListener() { - @Override - public void onDragStart(Polygon polygon) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureStartDrag(component); - } - } - - @Override - public void onDrag(Polygon polygon) { - for (MapEventListener listener : eventListeners) { - listener.onFeatureDrag(component); - } - } - - @Override - public void onDragEnd(Polygon polygon) { - if (component instanceof MapCircle) { - double latitude = 0, longitude = 0; - int count = polygon.getPoints().size(); - // Note that this approximates the centroid of the Circle. - for (GeoPoint p : polygon.getPoints()) { - latitude += p.getLatitude(); - longitude += p.getLongitude(); - } - if (count > 0) { - ((MapCircle) component).updateCenter(latitude / count, longitude / count); - } else { - ((MapCircle) component).updateCenter(0, 0); - } - } else if (component instanceof MapRectangle) { - double north = -90, east = -180, west = 180, south = 90; - for (GeoPoint p : polygon.getPoints()) { - double lat = p.getLatitude(); - double lng = p.getLongitude(); - north = Math.max(north, lat); - south = Math.min(south, lat); - east = Math.max(east, lng); - west = Math.min(west, lng); - } - ((MapRectangle) component).updateBounds(north, west, south, east); - } else { - ((MapPolygon) component).updatePoints(((MultiPolygon) polygon).getMultiPoints()); - ((MapPolygon) component).updateHolePoints(((MultiPolygon) polygon).getMultiHoles()); - } - for (MapEventListener listener : eventListeners) { - listener.onFeatureStopDrag(component); - } - } - }); - if (component.Visible()) { - showOverlay(polygon); - } else { - hideOverlay(polygon); - } - } - - @Override - public void addFeature(final MapPolygon aiPolygon) { - configurePolygon(aiPolygon, createNativePolygon(aiPolygon)); - } - - @Override - public void addFeature(MapCircle aiCircle) { - configurePolygon(aiCircle, createNativeCircle(aiCircle)); - } - - @Override - public void addFeature(MapRectangle aiRectangle) { - configurePolygon(aiRectangle, createNativeRectangle(aiRectangle)); - } - - @Override - public void removeFeature(MapFeature aiFeature) { - view.getOverlayManager().remove(featureOverlays.get(aiFeature)); - featureOverlays.remove(aiFeature); - } - - @Override - public void updateFeaturePosition(MapMarker aiMarker) { - Marker marker = (Marker)featureOverlays.get(aiMarker); - if (marker != null) { - marker.setAnchor(ANCHOR_HORIZONTAL[aiMarker.AnchorHorizontal()], - ANCHOR_VERTICAL[aiMarker.AnchorVertical()]); - marker.setPosition(new GeoPoint(aiMarker.Latitude(), aiMarker.Longitude())); - view.invalidate(); - } - } - - @Override - public void updateFeaturePosition(MapLineString aiPolyline) { - Polyline overlay = (Polyline) featureOverlays.get(aiPolyline); - if (overlay != null) { - overlay.setPoints(aiPolyline.getPoints()); - view.invalidate(); - } - } - - @Override - public void updateFeaturePosition(MapPolygon aiPolygon) { - MultiPolygon polygon = (MultiPolygon) featureOverlays.get(aiPolygon); - if (polygon != null) { - polygon.setMultiPoints(aiPolygon.getPoints()); - view.invalidate(); - } - } - - @Override - public void updateFeatureHoles(MapPolygon aiPolygon) { - MultiPolygon polygon = (MultiPolygon) featureOverlays.get(aiPolygon); - if (polygon != null) { - polygon.setMultiHoles(aiPolygon.getHolePoints()); - view.invalidate(); - } - } - - @Override - public void updateFeaturePosition(MapCircle aiCircle) { - GeoPoint center = new GeoPoint(aiCircle.Latitude(), aiCircle.Longitude()); - Polygon polygon = (Polygon) featureOverlays.get(aiCircle); - if (polygon != null) { - List geopoints = Polygon.pointsAsCircle(center, aiCircle.Radius()); - polygon.setPoints(geopoints); - view.invalidate(); - } - } - - @Override - @SuppressWarnings("unchecked") - public void updateFeaturePosition(MapRectangle aiRectangle) { - Polygon polygon = (Polygon) featureOverlays.get(aiRectangle); - if (polygon != null) { - List geopoints = (List) Polygon.pointsAsRect(new BoundingBox(aiRectangle.NorthLatitude(), - aiRectangle.EastLongitude(), aiRectangle.SouthLatitude(), aiRectangle.WestLongitude())); - polygon.setPoints(geopoints); - view.invalidate(); - } - } - - @Override - public void updateFeatureFill(final HasFill aiFeature) { - OverlayWithIW overlay = featureOverlays.get(aiFeature); - if (overlay == null) { - return; // not yet initialized - } - overlay.accept(new OverlayWithIWVisitor() { - @Override - public void visit(final Marker marker) { - getMarkerDrawable((MapMarker) aiFeature, new AsyncCallbackPair() { - @Override - public void onFailure(String message) { - Log.e(TAG, "Unable to update fill color for marker: " + message); - } - - @Override - public void onSuccess(Drawable result) { - marker.setIcon(result); - view.invalidate(); - } - }); - } - - @Override - public void visit(Polyline polyline) { - // polylines do not have fills - } - - @Override - public void visit(Polygon polygon) { - polygon.setFillColor(aiFeature.FillColor()); - view.invalidate(); - } - - }); - } - - @Override - public void updateFeatureStroke(final HasStroke aiFeature) { - OverlayWithIW overlay = featureOverlays.get(aiFeature); - if (overlay == null) { - return; // not yet initialized - } - overlay.accept(new OverlayWithIWVisitor() { - @Override - public void visit(final Marker marker) { - getMarkerDrawable((MapMarker) aiFeature, new AsyncCallbackPair() { - @Override - public void onFailure(String message) { - Log.e(TAG, "Unable to update stroke color for marker: " + message); - } - - @Override - public void onSuccess(Drawable result) { - marker.setIcon(result); - view.invalidate(); - } - }); - } - - @Override - public void visit(Polyline polyline) { - DisplayMetrics metrics = new DisplayMetrics(); - form.getWindowManager().getDefaultDisplay().getMetrics(metrics); - polyline.setColor(aiFeature.StrokeColor()); - polyline.setWidth(aiFeature.StrokeWidth() * metrics.density); - view.invalidate(); - } - - @Override - public void visit(Polygon polygon) { - DisplayMetrics metrics = new DisplayMetrics(); - form.getWindowManager().getDefaultDisplay().getMetrics(metrics); - polygon.setStrokeColor(aiFeature.StrokeColor()); - polygon.setStrokeWidth(aiFeature.StrokeWidth() * metrics.density); - view.invalidate(); - } - }); - } - - @Override - public void updateFeatureText(MapFeature aiFeature) { - OverlayWithIW overlay = featureOverlays.get(aiFeature); - if (overlay != null) { - overlay.setTitle(aiFeature.Title()); - overlay.setSnippet(aiFeature.Description()); - } - } - - @Override - public void updateFeatureDraggable(MapFeature aiFeature) { - OverlayWithIW overlay = featureOverlays.get(aiFeature); - if (overlay != null) { - overlay.setDraggable(aiFeature.Draggable()); - } - } - - @Override - public void updateFeatureImage(MapMarker aiMarker) { - final Marker marker = (Marker)featureOverlays.get(aiMarker); - if (marker == null) { - return; // not yet initialized - } - getMarkerDrawable(aiMarker, new AsyncCallbackPair() { - @Override - public void onFailure(String message) { - Log.e(TAG, "Unable to update feature image: " + message); - } - - @Override - public void onSuccess(Drawable result) { - marker.setIcon(result); - view.invalidate(); - } - }); - } - - @Override - public void updateFeatureSize(MapMarker aiMarker) { - final Marker marker = (Marker)featureOverlays.get(aiMarker); - if (marker == null) { - return; - } - getMarkerDrawable(aiMarker, new AsyncCallbackPair() { - @Override - public void onFailure(String message) { - Log.wtf(TAG, "Cannot find default marker"); - } - - @Override - public void onSuccess(Drawable result) { - marker.setIcon(result); - view.invalidate(); - } - }); - } - - private void getMarkerDrawable(final MapMarker aiMarker, - final AsyncCallbackPair callback) { - final String assetPath = aiMarker.ImageAsset(); - if (assetPath == null || assetPath.length() == 0 || assetPath.endsWith(".svg")) { - getMarkerDrawableVector(aiMarker, callback); - } else { - getMarkerDrawableRaster(aiMarker, callback); - } - } - - private void getMarkerDrawableVector(MapMarker aiMarker, - AsyncCallbackPair callback) { - SVG markerSvg = null; - if (defaultMarkerSVG == null) { - try { - defaultMarkerSVG = SVG.getFromAsset(view.getContext().getAssets(), "marker.svg"); - } catch (SVGParseException e) { - Log.e(TAG, "Invalid SVG in Marker asset", e); - } catch (IOException e) { - Log.e(TAG, "Unable to read Marker asset", e); - } - if (defaultMarkerSVG == null || defaultMarkerSVG.getRootElement() == null) { - throw new IllegalStateException("Unable to load SVG from assets"); - } - } - final String markerAsset = aiMarker.ImageAsset(); - if (markerAsset != null && markerAsset.length() != 0) { - try { - markerSvg = SVG.getFromAsset(view.getContext().getAssets(), markerAsset); - } catch (SVGParseException e) { - Log.e(TAG, "Invalid SVG in Marker asset", e); - } catch (IOException e) { - Log.e(TAG, "Unable to read Marker asset", e); - } - if (markerSvg == null) { - // Attempt to retrieve asset from ReplForm storage location - InputStream is = null; - try { - is = MediaUtil.openMedia(form, markerAsset); - markerSvg = SVG.getFromInputStream(is); - } catch (SVGParseException e) { - Log.e(TAG, "Invalid SVG in Marker asset", e); - } catch (IOException e) { - Log.e(TAG, "Unable to read Marker asset", e); - } finally { - IOUtils.closeQuietly(TAG, is); - } - } - } - if (markerSvg == null) { - markerSvg = defaultMarkerSVG; - } - try { - callback.onSuccess(rasterizeSVG(aiMarker, markerSvg)); - } catch(Exception e) { - callback.onFailure(e.getMessage()); - } - } - - private void getMarkerDrawableRaster(final MapMarker aiMarker, - final AsyncCallbackPair callback) { - MediaUtil.getBitmapDrawableAsync(form, aiMarker.ImageAsset(), aiMarker.Width(), - aiMarker.Height(), new AsyncCallbackPair() { - @Override - public void onFailure(String message) { - callback.onSuccess(getDefaultMarkerDrawable(aiMarker)); - } - - @Override - public void onSuccess(BitmapDrawable result) { - result.setAlpha((int) Math.round(aiMarker.FillOpacity() * 255.0f)); - callback.onSuccess(result); - } - }); - } - - private Drawable getDefaultMarkerDrawable(MapMarker aiMarker) { - return rasterizeSVG(aiMarker, defaultMarkerSVG); - } - - private static float getBestGuessWidth(SVG.Svg svg) { - if (svg.width != null) { - return svg.width.floatValue(); - } else if (svg.viewBox != null) { - return svg.viewBox.width; - } else { - return ComponentConstants.MARKER_PREFERRED_WIDTH; - } - } - - private static float getBestGuessHeight(SVG.Svg svg) { - if (svg.height != null) { - return svg.height.floatValue(); - } else if (svg.viewBox != null) { - return svg.viewBox.height; - } else { - return ComponentConstants.MARKER_PREFERRED_HEIGHT; - } - } - - private Drawable rasterizeSVG(MapMarker aiMarker, SVG markerSvg) { - SVG.Svg svg = markerSvg.getRootElement(); - final float density = view.getContext().getResources().getDisplayMetrics().density; - float height = aiMarker.Height() <= 0 ? getBestGuessHeight(svg) : aiMarker.Height(); - float width = aiMarker.Width() <= 0 ? getBestGuessWidth(svg) : aiMarker.Width(); - float scaleH = height / getBestGuessHeight(svg); - float scaleW = width / getBestGuessWidth(svg); - float scale = (float) Math.sqrt(scaleH * scaleH + scaleW * scaleW); - - // update fill color of SVG - Paint fillPaint = new Paint(); - Paint strokePaint = new Paint(); - PaintUtil.changePaint(fillPaint, aiMarker.FillColor()); - PaintUtil.changePaint(strokePaint, aiMarker.StrokeColor()); - SVG.Length strokeWidth = new SVG.Length(aiMarker.StrokeWidth() / scale); - for (SVG.SvgObject element : svg.getChildren()) { - if (element instanceof SVG.SvgConditionalElement) { - SVG.SvgConditionalElement path = (SVG.SvgConditionalElement) element; - path.baseStyle.fill = new SVG.Colour(fillPaint.getColor()); - path.baseStyle.fillOpacity = fillPaint.getAlpha()/255.0f; - path.baseStyle.stroke = new SVG.Colour(strokePaint.getColor()); - path.baseStyle.strokeOpacity = strokePaint.getAlpha()/255.0f; - path.baseStyle.strokeWidth = strokeWidth; - path.baseStyle.specifiedFlags = 0x3d; - if (path.style != null) { - if ((path.style.specifiedFlags & SPECIFIED_FILL) == 0) { - path.style.fill = new SVG.Colour(fillPaint.getColor()); - path.style.specifiedFlags |= SPECIFIED_FILL; - } - if ((path.style.specifiedFlags & SPECIFIED_FILL_OPACITY) == 0) { - path.style.fillOpacity = fillPaint.getAlpha()/255.0f; - path.style.specifiedFlags |= SPECIFIED_FILL_OPACITY; - } - if ((path.style.specifiedFlags & SPECIFIED_STROKE) == 0) { - path.style.stroke = new SVG.Colour(strokePaint.getColor()); - path.style.specifiedFlags |= SPECIFIED_STROKE; - } - if ((path.style.specifiedFlags & SPECIFIED_STROKE_OPACITY) == 0) { - path.style.strokeOpacity = strokePaint.getAlpha()/255.0f; - path.style.specifiedFlags |= SPECIFIED_STROKE_OPACITY; - } - if ((path.style.specifiedFlags & SPECIFIED_STROKE_WIDTH) == 0) { - path.style.strokeWidth = strokeWidth; - path.style.specifiedFlags |= SPECIFIED_STROKE_WIDTH; - } - } - } - } - - // draw SVG to Picture and create a BitmapDrawable for rendering - Picture picture = markerSvg.renderToPicture(); - Picture scaledPicture = new Picture(); - Canvas canvas = scaledPicture.beginRecording((int)((width + 2.0f * aiMarker.StrokeWidth()) * density), - (int)((height + 2.0f * aiMarker.StrokeWidth()) * density)); - canvas.scale(density * scaleW, density * scaleH); - canvas.translate(strokeWidth.floatValue(), strokeWidth.floatValue()); - picture.draw(canvas); - scaledPicture.endRecording(); - return new PictureDrawable(scaledPicture); - } - - private void createNativeMarker(final MapMarker aiMarker, - AsyncCallbackPair callback) { - final Marker osmMarker = new Marker(view); - featureOverlays.put(aiMarker, osmMarker); - osmMarker.setDraggable(aiMarker.Draggable()); - osmMarker.setTitle(aiMarker.Title()); - osmMarker.setSnippet(aiMarker.Description()); - osmMarker.setPosition(new GeoPoint(aiMarker.Latitude(), aiMarker.Longitude())); - osmMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); - getMarkerDrawable(aiMarker, new AsyncCallbackFacade(callback) { - @Override - public void onFailure(String message) { - callback.onFailure(message); - } - - @Override - public void onSuccess(Drawable result) { - osmMarker.setIcon(result); - callback.onSuccess(osmMarker); - } - }); - } - - private Polyline createNativePolyline(final MapLineString aiLineString) { - final Polyline osmLine = new Polyline(); - osmLine.setDraggable(aiLineString.Draggable()); - osmLine.setTitle(aiLineString.Title()); - osmLine.setSnippet(aiLineString.Description()); - osmLine.setPoints(aiLineString.getPoints()); - osmLine.setColor(aiLineString.StrokeColor()); - osmLine.setWidth(aiLineString.StrokeWidth()); - osmLine.setInfoWindow(defaultInfoWindow); - return osmLine; - } - - private void createPolygon(final Polygon osmPolygon, final MapFeature aiFeature) { - osmPolygon.setDraggable(aiFeature.Draggable()); - osmPolygon.setTitle(aiFeature.Title()); - osmPolygon.setSnippet(aiFeature.Description()); - osmPolygon.setStrokeColor(((HasStroke) aiFeature).StrokeColor()); - osmPolygon.setStrokeWidth(((HasStroke) aiFeature).StrokeWidth()); - osmPolygon.setFillColor(((HasFill) aiFeature).FillColor()); - osmPolygon.setInfoWindow(defaultInfoWindow); - } - - private MultiPolygon createNativePolygon(final MapPolygon aiPolygon) { - final MultiPolygon osmPolygon = new MultiPolygon(); - createPolygon(osmPolygon, aiPolygon); - osmPolygon.setMultiPoints(aiPolygon.getPoints()); - osmPolygon.setMultiHoles(aiPolygon.getHolePoints()); - return osmPolygon; - } - - private Polygon createNativeCircle(final MapCircle aiCircle) { - final Polygon osmPolygon = new Polygon(); - createPolygon(osmPolygon, aiCircle); - osmPolygon.setPoints(Polygon.pointsAsCircle(new GeoPoint(aiCircle.Latitude(), aiCircle.Longitude()), aiCircle.Radius())); - return osmPolygon; - } - - private Polygon createNativeRectangle(final MapRectangle aiRectangle) { - BoundingBox bbox = new BoundingBox(aiRectangle.NorthLatitude(), aiRectangle.EastLongitude(), - aiRectangle.SouthLatitude(), aiRectangle.WestLongitude()); - final Polygon osmPolygon = new Polygon(); - createPolygon(osmPolygon, aiRectangle); - osmPolygon.setPoints(new ArrayList((List) Polygon.pointsAsRect(bbox))); - return osmPolygon; - } - - @Override - public void showFeature(MapFeature feature) { - if (!hiddenFeatures.contains(feature)) { - showOverlay(featureOverlays.get(feature)); - } - } - - protected void showOverlay(OverlayWithIW overlay) { - view.getOverlayManager().add(overlay); - view.invalidate(); - } - - @Override - public void hideFeature(MapFeature feature) { - hideOverlay(featureOverlays.get(feature)); - } - - protected void hideOverlay(OverlayWithIW overlay) { - view.getOverlayManager().remove(overlay); - view.invalidate(); - } - - @Override - public boolean isFeatureVisible(MapFeature feature) { - OverlayWithIW overlay = featureOverlays.get(feature); - return overlay != null && view.getOverlayManager().contains(overlay); - } - - @Override - public boolean isFeatureCollectionVisible(MapFeatureCollection collection) { - return !hiddenFeatureCollections.contains(collection); - } - - @Override - public void setFeatureCollectionVisible(MapFeatureCollection collection, boolean visible) { - if ((!visible && hiddenFeatureCollections.contains(collection)) - || (visible && !hiddenFeatureCollections.contains(collection))) { - // Nothing to do - return; - } - if (visible) { - hiddenFeatureCollections.remove(collection); - for (MapFeature feature : collection) { - hiddenFeatures.remove(feature); - if (feature.Visible()) { - showFeature(feature); - } - } - } else { - hiddenFeatureCollections.add(collection); - for (MapFeature feature : collection) { - hiddenFeatures.add(feature); - hideFeature(feature); - } - } - } - - @Override - public void showInfobox(MapFeature feature) { - OverlayWithIW overlay = featureOverlays.get(feature); - if (overlay instanceof org.osmdroid.views.overlay.Marker) { - overlay.showInfoWindow(); - } else if (overlay instanceof org.osmdroid.views.overlay.Polyline) { - org.osmdroid.views.overlay.Polyline polyOverlay = (org.osmdroid.views.overlay.Polyline)overlay; - polyOverlay.showInfoWindow(feature.getCentroid()); - } else { - org.osmdroid.views.overlay.Polygon polyOverlay = (org.osmdroid.views.overlay.Polygon)overlay; - polyOverlay.showInfoWindow(feature.getCentroid()); - } - } - - @Override - public void hideInfobox(MapFeature feature) { - OverlayWithIW overlay = featureOverlays.get(feature); - overlay.closeInfoWindow(); - } - - @Override - public boolean isInfoboxVisible(MapFeature feature) { - OverlayWithIW overlay = featureOverlays.get(feature); - return overlay != null && overlay.isInfoWindowOpen(); - } - - @Override - public BoundingBox getBoundingBox() { - return view.getBoundingBox(); - } - - @Override - public void setBoundingBox(BoundingBox bbox) { - view.getController().setCenter(bbox.getCenter()); - view.getController().zoomToSpan(bbox.getLatitudeSpan(), bbox.getLongitudeSpan()); - } - - @Override - public boolean onScroll(ScrollEvent event) { - for (MapEventListener listener : eventListeners) { - listener.onBoundsChanged(); - } - return true; - } - - @Override - public boolean onZoom(ZoomEvent event) { - zoomControls.updateButtons(); - for (MapEventListener listener : eventListeners) { - listener.onZoom(); - } - return true; - } - - @Override - public LocationSensor.LocationSensorListener getLocationListener() { - return locationProvider; - } - - @Override - public int getOverlayCount() { - System.err.println(view.getOverlays()); - return view.getOverlays().size(); - } - - @Override - public void setRotation(float Rotation) { - view.setMapOrientation(Rotation); - } - - @Override - public float getRotation() { - return view.getMapOrientation(); - } - - @Override - public void setScaleVisible(boolean show) { - scaleBar.setEnabled(show); - view.invalidate(); - } - - @Override - public boolean isScaleVisible() { - return scaleBar.isEnabled(); - } - - @Override - public void setScaleUnits(MapScaleUnits units) { - switch (units) { - case METRIC: - scaleBar.setUnitsOfMeasure(UnitsOfMeasure.metric); - break; - case IMPERIAL: - scaleBar.setUnitsOfMeasure(UnitsOfMeasure.imperial); - break; - default: - throw new IllegalArgumentException("Unallowable unit system: " + units); - } - view.invalidate(); - } - - @Override - public MapScaleUnits getScaleUnits() { - switch (scaleBar.getUnitsOfMeasure()) { - case imperial: - return MapScaleUnits.IMPERIAL; - case metric: - return MapScaleUnits.METRIC; - default: - throw new IllegalStateException("Somehow we have an unallowed unit system"); - } - } - - @Override - public void setScaleUnitsAbstract(ScaleUnits units) { - switch (units) { - case Metric: - scaleBar.setUnitsOfMeasure(UnitsOfMeasure.metric); - break; - case Imperial: - scaleBar.setUnitsOfMeasure(UnitsOfMeasure.imperial); - break; - default: - break; - } - view.invalidate(); - } - - @Override - public ScaleUnits getScaleUnitsAbstract() { - switch (scaleBar.getUnitsOfMeasure()) { - case imperial: - return ScaleUnits.Imperial; - case metric: - return ScaleUnits.Metric; - default: - throw new IllegalStateException("Somehow we have an unallowed unit system"); - } - } - - static class MultiPolygon extends Polygon { - - private List children = new ArrayList(); - private boolean draggable; - private OnClickListener clickListener; - private OnDragListener dragListener; - - @Override - public void showInfoWindow() { - if (children.size() > 0) { - children.get(0).showInfoWindow(); - } - } - - @Override - public void draw(Canvas canvas, MapView mapView, boolean b) { - for (Polygon child : children) { - child.draw(canvas, mapView, b); - } - } - - public List> getMultiPoints() { - List> result = new ArrayList<>(); - for (Polygon p : children) { - result.add(p.getPoints()); - } - return result; - } - - public void setMultiPoints(List> points) { - Iterator polygonIterator = children.iterator(); - Iterator> pointIterator = points.iterator(); - while (polygonIterator.hasNext() && pointIterator.hasNext()) { - polygonIterator.next().setPoints(pointIterator.next()); - } - while (polygonIterator.hasNext()) { - polygonIterator.next(); - polygonIterator.remove(); - } - while (pointIterator.hasNext()) { - Polygon p = new Polygon(); - p.setPoints(pointIterator.next()); - p.setStrokeColor(getStrokeColor()); - p.setFillColor(getFillColor()); - p.setStrokeWidth(getStrokeWidth()); - p.setInfoWindow(getInfoWindow()); - p.setDraggable(draggable); - p.setOnClickListener(clickListener); - p.setOnDragListener(dragListener); - children.add(p); - } - } - - @SuppressWarnings("unchecked") // upcasting nested ArrayList to List - public List>> getMultiHoles() { - List>> result = new ArrayList<>(); - for (Polygon p : children) { - result.add((List) p.getHoles()); - } - return result; - } - - public void setMultiHoles(List>> holes) { - if (holes == null || holes.isEmpty()) { - for (Polygon child : children) { - child.setHoles(Collections.>emptyList()); - } - } else if (holes.size() != children.size()) { - throw new IllegalArgumentException("Holes and points are not of the same arity."); - } else { - Iterator polygonIterator = children.iterator(); - Iterator>> holeIterator = holes.iterator(); - while (polygonIterator.hasNext() && holeIterator.hasNext()) { - polygonIterator.next().setHoles(holeIterator.next()); - } - } - } - - @Override - public void setDraggable(boolean draggable) { - super.setDraggable(draggable); - this.draggable = draggable; - for (Polygon child : children) { - child.setDraggable(draggable); - } - } - - @Override - public void setOnClickListener(OnClickListener listener) { - super.setOnClickListener(listener); - clickListener = listener; - for (Polygon child : children) { - child.setOnClickListener(listener); - } - } - - @Override - public void setOnDragListener(OnDragListener listener) { - super.setOnDragListener(listener); - dragListener = listener; - for (Polygon child : children) { - child.setOnDragListener(listener); - } - } - - @Override - public void setStrokeWidth(float strokeWidth) { - super.setStrokeWidth(strokeWidth); - for (Polygon child : children) { - child.setStrokeWidth(strokeWidth); - } - } - - @Override - public void setStrokeColor(int strokeColor) { - super.setStrokeColor(strokeColor); - for (Polygon child : children) { - child.setStrokeColor(strokeColor); - } - } - - @Override - public void setFillColor(int fillColor) { - super.setFillColor(fillColor); - for (Polygon child : children) { - child.setFillColor(fillColor); - } - } - - @Override - public void setTitle(String title) { - super.setTitle(title); - for (Polygon child : children) { - child.setTitle(title); - } - } - - @Override - public void setSnippet(String snippet) { - super.setSnippet(snippet); - for (Polygon child : children) { - child.setSnippet(snippet); - } - } - - @Override - public boolean onSingleTapConfirmed(MotionEvent event, MapView mapView) { - for (Polygon child : children) { - if (child.onSingleTapConfirmed(event, mapView)) { - return true; - } - } - return false; - } - - @Override - public boolean contains(MotionEvent event) { - for (Polygon child : children) { - if (child.contains(event)) { - return true; - } - } - return false; - } - - @Override - public boolean onLongPress(MotionEvent event, MapView mapView) { - boolean touched = contains(event); - if (touched){ - if (mDraggable){ - mIsDragged = true; - closeInfoWindow(); - mDragStartPoint = event; - if (mOnDragListener != null) { - mOnDragListener.onDragStart( this ); - } - moveToEventPosition(event, mDragStartPoint, mapView); - } else if (mOnClickListener != null) { - mOnClickListener.onLongClick( this, mapView, - (GeoPoint) mapView.getProjection().fromPixels( (int) event.getX(), - (int) event.getY() ) ); - } - } - return touched; - } - - @Override - public void moveToEventPosition(final MotionEvent event, final MotionEvent start, - final MapView view) { - for (Polygon child : children) { - child.moveToEventPosition(event, start, view); - } - } - - @Override - public void finishMove(final MotionEvent start, final MotionEvent end, final MapView view) { - for (Polygon child : children) { - child.finishMove(start, end, view); - } - } - - @Override - public boolean onTouchEvent(MotionEvent event, MapView mapView) { - if (mDraggable && mIsDragged){ - if (event.getAction() == MotionEvent.ACTION_UP) { - mIsDragged = false; - finishMove(mDragStartPoint, event, mapView); - if (mOnDragListener != null) { - mOnDragListener.onDragEnd( this ); - } - return true; - } else if (event.getAction() == MotionEvent.ACTION_MOVE) { - moveToEventPosition( event, mDragStartPoint, mapView ); - if (mOnDragListener != null) { - mOnDragListener.onDrag( this ); - } - return true; - } - } - return false; - } - } -} diff --git a/appinventor/components/src/AndroidManifest.xml b/appinventor/components/src/main/AndroidManifest.xml similarity index 53% rename from appinventor/components/src/AndroidManifest.xml rename to appinventor/components/src/main/AndroidManifest.xml index 981c0d932b2..962692d83a4 100644 --- a/appinventor/components/src/AndroidManifest.xml +++ b/appinventor/components/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + + package="com.google.appinventor.components.runtime"> - \ No newline at end of file diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/AccelerometerSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/AccelerometerSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/AccelerometerSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/AccelerometerSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/AccessibleComponent.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/AccessibleComponent.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/AccessibleComponent.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/AccessibleComponent.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ActivityResultListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ActivityResultListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ActivityResultListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ActivityResultListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ActivityStarter.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ActivityStarter.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ActivityStarter.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ActivityStarter.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/AlarmHandler.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/AlarmHandler.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/AlarmHandler.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/AlarmHandler.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/AndroidNonvisibleComponent.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/AndroidNonvisibleComponent.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/AndroidNonvisibleComponent.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/AndroidNonvisibleComponent.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/AndroidViewComponent.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/AndroidViewComponent.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/AndroidViewComponent.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/AndroidViewComponent.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/AppInventorCompatActivity.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/AppInventorCompatActivity.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/AppInventorCompatActivity.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/AppInventorCompatActivity.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/AreaChartDataModel.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/AreaChartDataModel.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/AreaChartDataModel.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/AreaChartDataModel.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/AreaChartView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/AreaChartView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/AreaChartView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/AreaChartView.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/AxisChartView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/AxisChartView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/AxisChartView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/AxisChartView.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Ball.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ball.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Ball.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ball.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/BarChartDataModel.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/BarChartDataModel.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/BarChartDataModel.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/BarChartDataModel.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/BarChartView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/BarChartView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/BarChartView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/BarChartView.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/BarcodeScanner.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/BarcodeScanner.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/BarcodeScanner.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/BarcodeScanner.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Barometer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Barometer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Barometer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Barometer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/BluetoothClient.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/BluetoothClient.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/BluetoothClient.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/BluetoothClient.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/BluetoothConnectionBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/BluetoothConnectionBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/BluetoothConnectionBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/BluetoothConnectionBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/BluetoothConnectionListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/BluetoothConnectionListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/BluetoothConnectionListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/BluetoothConnectionListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/BluetoothServer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/BluetoothServer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/BluetoothServer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/BluetoothServer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/BufferedSingleValueSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/BufferedSingleValueSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/BufferedSingleValueSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/BufferedSingleValueSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Button.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Button.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Button.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Button.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ButtonBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ButtonBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ButtonBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ButtonBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Camcorder.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Camcorder.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Camcorder.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Camcorder.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Camera.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Camera.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Camera.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Camera.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Canvas.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Canvas.java old mode 100755 new mode 100644 similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Canvas.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Canvas.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Chart.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Chart.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Chart.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Chart.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Chart2DDataModel.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Chart2DDataModel.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Chart2DDataModel.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Chart2DDataModel.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ChartData2D.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ChartData2D.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ChartData2D.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ChartData2D.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ChartDataBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ChartDataBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ChartDataBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ChartDataBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ChartDataModel.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ChartDataModel.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ChartDataModel.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ChartDataModel.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ChartView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ChartView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ChartView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ChartView.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/CheckBox.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/CheckBox.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/CheckBox.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/CheckBox.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Circle.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Circle.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Circle.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Circle.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Clock.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Clock.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Clock.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Clock.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/CloudDB.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/CloudDB.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/CloudDB.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/CloudDB.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Component.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Component.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Component.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Component.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ComponentContainer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ComponentContainer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ComponentContainer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ComponentContainer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ContactPicker.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ContactPicker.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ContactPicker.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ContactPicker.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/DataFile.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/DataFile.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/DataFile.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/DataFile.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/DataSource.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/DataSource.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/DataSource.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/DataSource.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/DataSourceChangeListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/DataSourceChangeListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/DataSourceChangeListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/DataSourceChangeListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/DatePicker.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/DatePicker.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/DatePicker.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/DatePicker.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Deleteable.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Deleteable.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Deleteable.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Deleteable.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/EmailAddressAdapter.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/EmailAddressAdapter.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/EmailAddressAdapter.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/EmailAddressAdapter.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/EmailPicker.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/EmailPicker.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/EmailPicker.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/EmailPicker.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Ev3ColorSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3ColorSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Ev3ColorSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3ColorSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Ev3Commands.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3Commands.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Ev3Commands.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3Commands.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Ev3GyroSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3GyroSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Ev3GyroSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3GyroSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Ev3Motors.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3Motors.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Ev3Motors.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3Motors.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Ev3Sound.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3Sound.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Ev3Sound.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3Sound.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Ev3TouchSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3TouchSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Ev3TouchSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3TouchSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Ev3UI.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3UI.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Ev3UI.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3UI.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Ev3UltrasonicSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3UltrasonicSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Ev3UltrasonicSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Ev3UltrasonicSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/EventDispatcher.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/EventDispatcher.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/EventDispatcher.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/EventDispatcher.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/FeatureCollection.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/FeatureCollection.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/FeatureCollection.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/FeatureCollection.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/File.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/File.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/File.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/File.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/FileBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/FileBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/FileBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/FileBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/FirebaseDB.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/FirebaseDB.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/FirebaseDB.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/FirebaseDB.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Form.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Form.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Form.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Form.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/FusiontablesControl.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/FusiontablesControl.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/FusiontablesControl.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/FusiontablesControl.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/GameClient.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/GameClient.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/GameClient.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/GameClient.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/GyroscopeSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/GyroscopeSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/GyroscopeSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/GyroscopeSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/HVArrangement.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/HVArrangement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/HVArrangement.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/HVArrangement.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/HandlesEventDispatching.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/HandlesEventDispatching.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/HandlesEventDispatching.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/HandlesEventDispatching.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/HorizontalArrangement.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/HorizontalArrangement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/HorizontalArrangement.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/HorizontalArrangement.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/HorizontalScrollArrangement.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/HorizontalScrollArrangement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/HorizontalScrollArrangement.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/HorizontalScrollArrangement.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Hygrometer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Hygrometer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Hygrometer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Hygrometer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Image.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Image.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Image.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Image.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ImagePicker.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ImagePicker.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ImagePicker.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ImagePicker.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ImageSprite.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ImageSprite.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ImageSprite.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ImageSprite.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/IntentBasedSpeechRecognizer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/IntentBasedSpeechRecognizer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/IntentBasedSpeechRecognizer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/IntentBasedSpeechRecognizer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Label.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Label.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Label.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Label.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Layout.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Layout.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Layout.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Layout.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LegoMindstormsEv3Base.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LegoMindstormsEv3Base.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LegoMindstormsEv3Base.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LegoMindstormsEv3Base.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LegoMindstormsEv3Sensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LegoMindstormsEv3Sensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LegoMindstormsEv3Sensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LegoMindstormsEv3Sensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LegoMindstormsNxtBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LegoMindstormsNxtBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LegoMindstormsNxtBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LegoMindstormsNxtBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LegoMindstormsNxtSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LegoMindstormsNxtSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LegoMindstormsNxtSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LegoMindstormsNxtSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LightSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LightSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LightSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LightSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LineChartBaseDataModel.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LineChartBaseDataModel.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LineChartBaseDataModel.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LineChartBaseDataModel.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LineChartDataModel.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LineChartDataModel.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LineChartDataModel.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LineChartDataModel.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LineChartView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LineChartView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LineChartView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LineChartView.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LineChartViewBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LineChartViewBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LineChartViewBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LineChartViewBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LineString.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LineString.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LineString.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LineString.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LinearLayout.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LinearLayout.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LinearLayout.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LinearLayout.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ListAdapterWithRecyclerView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ListAdapterWithRecyclerView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ListAdapterWithRecyclerView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ListAdapterWithRecyclerView.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ListPicker.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ListPicker.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ListPicker.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ListPicker.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ListPickerActivity.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ListPickerActivity.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ListPickerActivity.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ListPickerActivity.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ListView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ListView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ListView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ListView.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/LocationSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/LocationSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/LocationSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/LocationSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/MagneticFieldSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/MagneticFieldSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/MagneticFieldSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/MagneticFieldSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Map.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Map.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Map.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Map.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/MapFeatureBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/MapFeatureBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/MapFeatureBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/MapFeatureBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/MapFeatureBaseWithFill.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/MapFeatureBaseWithFill.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/MapFeatureBaseWithFill.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/MapFeatureBaseWithFill.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/MapFeatureContainerBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/MapFeatureContainerBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/MapFeatureContainerBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/MapFeatureContainerBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Marker.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Marker.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Marker.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Marker.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/MediaStore.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/MediaStore.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/MediaStore.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/MediaStore.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Navigation.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Navigation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Navigation.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Navigation.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/NearField.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/NearField.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/NearField.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/NearField.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Notifier.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Notifier.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Notifier.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Notifier.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/NxtColorSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtColorSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/NxtColorSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtColorSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/NxtDirectCommands.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtDirectCommands.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/NxtDirectCommands.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtDirectCommands.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/NxtDrive.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtDrive.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/NxtDrive.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtDrive.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/NxtLightSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtLightSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/NxtLightSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtLightSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/NxtSoundSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtSoundSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/NxtSoundSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtSoundSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/NxtTouchSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtTouchSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/NxtTouchSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtTouchSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/NxtUltrasonicSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtUltrasonicSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/NxtUltrasonicSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/NxtUltrasonicSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ObservableDataSource.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ObservableDataSource.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ObservableDataSource.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ObservableDataSource.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OnClearListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnClearListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OnClearListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnClearListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OnCreateOptionsMenuListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnCreateOptionsMenuListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OnCreateOptionsMenuListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnCreateOptionsMenuListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OnDestroyListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnDestroyListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OnDestroyListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnDestroyListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OnNewIntentListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnNewIntentListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OnNewIntentListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnNewIntentListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OnOptionsItemSelectedListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnOptionsItemSelectedListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OnOptionsItemSelectedListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnOptionsItemSelectedListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OnOrientationChangeListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnOrientationChangeListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OnOrientationChangeListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnOrientationChangeListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OnPauseListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnPauseListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OnPauseListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnPauseListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OnResumeListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnResumeListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OnResumeListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnResumeListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OnStopListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnStopListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OnStopListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OnStopListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OptionHelper.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OptionHelper.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OptionHelper.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OptionHelper.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/OrientationSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/OrientationSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/OrientationSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/OrientationSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/PasswordTextBox.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/PasswordTextBox.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/PasswordTextBox.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/PasswordTextBox.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Pedometer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Pedometer.java old mode 100755 new mode 100644 similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Pedometer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Pedometer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/PermissionResultHandler.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/PermissionResultHandler.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/PermissionResultHandler.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/PermissionResultHandler.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/PhoneCall.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/PhoneCall.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/PhoneCall.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/PhoneCall.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/PhoneNumberPicker.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/PhoneNumberPicker.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/PhoneNumberPicker.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/PhoneNumberPicker.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/PhoneStatus.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/PhoneStatus.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/PhoneStatus.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/PhoneStatus.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Picker.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Picker.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Picker.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Picker.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/PieChartDataModel.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/PieChartDataModel.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/PieChartDataModel.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/PieChartDataModel.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/PieChartView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/PieChartView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/PieChartView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/PieChartView.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Player.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Player.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Player.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Player.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/PointChartDataModel.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/PointChartDataModel.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/PointChartDataModel.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/PointChartDataModel.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/PointChartView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/PointChartView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/PointChartView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/PointChartView.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Polygon.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Polygon.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Polygon.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Polygon.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/PolygonBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/PolygonBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/PolygonBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/PolygonBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ProximitySensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ProximitySensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ProximitySensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ProximitySensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/RealTimeDataSource.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/RealTimeDataSource.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/RealTimeDataSource.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/RealTimeDataSource.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Rectangle.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Rectangle.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Rectangle.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Rectangle.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ReplApplication.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ReplApplication.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ReplApplication.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ReplApplication.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ReplForm.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ReplForm.java similarity index 99% rename from appinventor/components/src/com/google/appinventor/components/runtime/ReplForm.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ReplForm.java index ed95e8f8c4a..1610c4f0889 100644 --- a/appinventor/components/src/com/google/appinventor/components/runtime/ReplForm.java +++ b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ReplForm.java @@ -31,7 +31,6 @@ import com.google.appinventor.components.runtime.util.AppInvHTTPD; import com.google.appinventor.components.runtime.util.ErrorMessages; -import com.google.appinventor.components.runtime.util.FileUtil; import com.google.appinventor.components.runtime.util.OnInitializeListener; import com.google.appinventor.components.runtime.util.QUtil; import com.google.appinventor.components.runtime.util.RetValManager; diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ScaledFrameLayout.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ScaledFrameLayout.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ScaledFrameLayout.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ScaledFrameLayout.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ScatterChartDataModel.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ScatterChartDataModel.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ScatterChartDataModel.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ScatterChartDataModel.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ScatterChartView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ScatterChartView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ScatterChartView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ScatterChartView.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/SensorComponent.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/SensorComponent.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/SensorComponent.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/SensorComponent.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Serial.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Serial.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Serial.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Serial.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ServiceBasedSpeechRecognizer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ServiceBasedSpeechRecognizer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ServiceBasedSpeechRecognizer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ServiceBasedSpeechRecognizer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Sharing.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Sharing.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Sharing.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Sharing.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/SingleValueSensor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/SingleValueSensor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/SingleValueSensor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/SingleValueSensor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Slider.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Slider.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Slider.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Slider.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Sound.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Sound.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Sound.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Sound.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/SoundRecorder.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/SoundRecorder.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/SoundRecorder.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/SoundRecorder.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/SpeechListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/SpeechListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/SpeechListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/SpeechListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/SpeechRecognizer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/SpeechRecognizer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/SpeechRecognizer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/SpeechRecognizer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/SpeechRecognizerController.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/SpeechRecognizerController.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/SpeechRecognizerController.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/SpeechRecognizerController.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Spinner.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Spinner.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Spinner.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Spinner.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/SplashActivity.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/SplashActivity.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/SplashActivity.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/SplashActivity.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Spreadsheet.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Spreadsheet.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Spreadsheet.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Spreadsheet.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Sprite.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Sprite.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Sprite.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Sprite.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Switch.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Switch.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Switch.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Switch.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/TableArrangement.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/TableArrangement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/TableArrangement.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/TableArrangement.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/TableLayout.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/TableLayout.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/TableLayout.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/TableLayout.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/TextBox.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/TextBox.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/TextBox.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/TextBox.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/TextBoxBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/TextBoxBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/TextBoxBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/TextBoxBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/TextToSpeech.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/TextToSpeech.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/TextToSpeech.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/TextToSpeech.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Texting.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Texting.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Texting.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Texting.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Thermometer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Thermometer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Thermometer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Thermometer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/TimePicker.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/TimePicker.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/TimePicker.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/TimePicker.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/TinyDB.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/TinyDB.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/TinyDB.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/TinyDB.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/TinyWebDB.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/TinyWebDB.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/TinyWebDB.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/TinyWebDB.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/ToggleBase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/ToggleBase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/ToggleBase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/ToggleBase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Translator.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Translator.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Translator.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Translator.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Twitter.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Twitter.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Twitter.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Twitter.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/VerticalArrangement.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/VerticalArrangement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/VerticalArrangement.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/VerticalArrangement.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/VerticalScrollArrangement.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/VerticalScrollArrangement.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/VerticalScrollArrangement.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/VerticalScrollArrangement.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/VideoPlayer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/VideoPlayer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/VideoPlayer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/VideoPlayer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/VisibleComponent.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/VisibleComponent.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/VisibleComponent.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/VisibleComponent.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Voting.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Voting.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/Voting.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Voting.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/Web.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Web.java similarity index 98% rename from appinventor/components/src/com/google/appinventor/components/runtime/Web.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/Web.java index 3bb8899d6d3..e2acf069959 100644 --- a/appinventor/components/src/com/google/appinventor/components/runtime/Web.java +++ b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/Web.java @@ -41,7 +41,7 @@ import com.google.appinventor.components.runtime.errors.PermissionException; import com.google.appinventor.components.runtime.errors.RequestTimeoutException; -import com.google.appinventor.components.runtime.repackaged.org.json.XML; +//import com.google.appinventor.components.runtime.repackaged.org.json.XML; import com.google.appinventor.components.runtime.util.AsynchUtil; import com.google.appinventor.components.runtime.util.BulkPermissionRequest; @@ -1108,18 +1108,18 @@ public String JsonObjectEncode(Object jsonObject) { // documentation string in a way that will look work both as a tooltip and in the autogenerated // HTML for the component documentation on the Web. It's too long for a tooltip, anyway. public Object XMLTextDecode(String XmlText) { - try { - return JsonTextDecode(XML.toJSONObject(XmlText).toString()); - } catch (com.google.appinventor.components.runtime.repackaged.org.json.JSONException e) { - // We could be more precise and signal different errors for the conversion to JSON - // versus the decoding of that JSON, but showing the actual error message should - // be good enough. - Log.e(LOG_TAG, e.getMessage()); - form.dispatchErrorOccurredEvent(this, "XMLTextDecode", - ErrorMessages.ERROR_WEB_JSON_TEXT_DECODE_FAILED, e.getMessage()); - // This XMLTextDecode should always return a list, even in the case of an error +// try { +// return JsonTextDecode(XML.toJSONObject(XmlText).toString()); +// } catch (org.json.JSONException e) { +// // We could be more precise and signal different errors for the conversion to JSON +// // versus the decoding of that JSON, but showing the actual error message should +// // be good enough. +// Log.e(LOG_TAG, e.getMessage()); +// form.dispatchErrorOccurredEvent(this, "XMLTextDecode", +// ErrorMessages.ERROR_WEB_JSON_TEXT_DECODE_FAILED, e.getMessage()); +// // This XMLTextDecode should always return a list, even in the case of an error +// } return YailList.makeEmptyList(); - } } /** diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/WebViewActivity.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/WebViewActivity.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/WebViewActivity.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/WebViewActivity.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/WebViewer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/WebViewer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/WebViewer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/WebViewer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/YandexTranslate.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/YandexTranslate.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/YandexTranslate.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/YandexTranslate.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/collect/Lists.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/collect/Lists.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/collect/Lists.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/collect/Lists.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/collect/Maps.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/collect/Maps.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/collect/Maps.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/collect/Maps.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/collect/Sets.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/collect/Sets.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/collect/Sets.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/collect/Sets.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/collect/package-info.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/collect/package-info.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/collect/package-info.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/collect/package-info.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/ArrayIndexOutOfBoundsError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/ArrayIndexOutOfBoundsError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/ArrayIndexOutOfBoundsError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/ArrayIndexOutOfBoundsError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/AssertionFailure.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/AssertionFailure.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/AssertionFailure.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/AssertionFailure.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/ConversionError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/ConversionError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/ConversionError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/ConversionError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/DispatchableError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/DispatchableError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/DispatchableError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/DispatchableError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/FileAlreadyExistsError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/FileAlreadyExistsError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/FileAlreadyExistsError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/FileAlreadyExistsError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/FileIOError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/FileIOError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/FileIOError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/FileIOError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/IllegalArgumentError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/IllegalArgumentError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/IllegalArgumentError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/IllegalArgumentError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/IterationError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/IterationError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/IterationError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/IterationError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/NoSuchFileError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/NoSuchFileError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/NoSuchFileError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/NoSuchFileError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/PermissionException.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/PermissionException.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/PermissionException.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/PermissionException.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/RequestTimeoutException.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/RequestTimeoutException.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/RequestTimeoutException.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/RequestTimeoutException.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/RuntimeError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/RuntimeError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/RuntimeError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/RuntimeError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/StopBlocksExecution.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/StopBlocksExecution.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/StopBlocksExecution.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/StopBlocksExecution.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/UninitializedInstanceError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/UninitializedInstanceError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/UninitializedInstanceError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/UninitializedInstanceError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/UnknownFileHandleError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/UnknownFileHandleError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/UnknownFileHandleError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/UnknownFileHandleError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/YailRuntimeError.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/YailRuntimeError.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/YailRuntimeError.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/YailRuntimeError.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/errors/package-info.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/package-info.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/errors/package-info.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/errors/package-info.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/multidex/MultiDex.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/multidex/MultiDex.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/multidex/MultiDex.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/multidex/MultiDex.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/multidex/MultiDexApplication.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/multidex/MultiDexApplication.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/multidex/MultiDexApplication.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/multidex/MultiDexApplication.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/multidex/MultiDexExtractor.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/multidex/MultiDexExtractor.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/multidex/MultiDexExtractor.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/multidex/MultiDexExtractor.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/multidex/ZipEntryReader.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/multidex/ZipEntryReader.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/multidex/ZipEntryReader.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/multidex/ZipEntryReader.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/multidex/ZipUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/multidex/ZipUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/multidex/ZipUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/multidex/ZipUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/package-info.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/package-info.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/package-info.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/package-info.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/translate/TranslatorToken.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/translate/TranslatorToken.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/translate/TranslatorToken.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/translate/TranslatorToken.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/translate/tr.proto b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/translate/tr.proto similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/translate/tr.proto rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/translate/tr.proto diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/AccountChooser.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AccountChooser.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/AccountChooser.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AccountChooser.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/AlignmentUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AlignmentUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/AlignmentUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AlignmentUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/AnimationUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AnimationUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/AnimationUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AnimationUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/AppInvHTTPD.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AppInvHTTPD.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/AppInvHTTPD.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AppInvHTTPD.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/AssetFetcher.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AssetFetcher.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/AssetFetcher.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AssetFetcher.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/AsyncCallbackFacade.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AsyncCallbackFacade.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/AsyncCallbackFacade.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AsyncCallbackFacade.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/AsyncCallbackPair.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AsyncCallbackPair.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/AsyncCallbackPair.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AsyncCallbackPair.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/AsynchUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AsynchUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/AsynchUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/AsynchUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/Base58Util.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Base58Util.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/Base58Util.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Base58Util.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/BiggerFuture.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/BiggerFuture.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/BiggerFuture.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/BiggerFuture.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/BluetoothReflection.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/BluetoothReflection.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/BluetoothReflection.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/BluetoothReflection.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/BoundingBox.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/BoundingBox.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/BoundingBox.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/BoundingBox.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/BulkPermissionRequest.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/BulkPermissionRequest.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/BulkPermissionRequest.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/BulkPermissionRequest.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ChartDataSourceUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ChartDataSourceUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ChartDataSourceUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ChartDataSourceUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ClientLoginHelper.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ClientLoginHelper.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ClientLoginHelper.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ClientLoginHelper.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/CloudDBJedisListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/CloudDBJedisListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/CloudDBJedisListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/CloudDBJedisListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/CompositeFileOperation.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/CompositeFileOperation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/CompositeFileOperation.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/CompositeFileOperation.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/Continuation.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Continuation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/Continuation.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Continuation.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ContinuationUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ContinuationUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ContinuationUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ContinuationUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/CsvUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/CsvUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/CsvUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/CsvUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/CustomMediaController.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/CustomMediaController.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/CustomMediaController.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/CustomMediaController.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/Dates.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Dates.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/Dates.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Dates.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/DonutUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/DonutUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/DonutUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/DonutUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/DummyMapController.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/DummyMapController.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/DummyMapController.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/DummyMapController.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/EclairUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/EclairUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/EclairUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/EclairUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ElementsUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ElementsUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ElementsUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ElementsUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ErrorMessages.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ErrorMessages.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ErrorMessages.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ErrorMessages.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/Ev3BinaryParser.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Ev3BinaryParser.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/Ev3BinaryParser.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Ev3BinaryParser.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/Ev3Constants.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Ev3Constants.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/Ev3Constants.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Ev3Constants.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ExternalTextToSpeech.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ExternalTextToSpeech.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ExternalTextToSpeech.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ExternalTextToSpeech.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FileAccessMode.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileAccessMode.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FileAccessMode.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileAccessMode.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FileOperation.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileOperation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FileOperation.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileOperation.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FileReadOperation.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileReadOperation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FileReadOperation.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileReadOperation.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FileStreamOperation.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileStreamOperation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FileStreamOperation.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileStreamOperation.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FileStreamReadOperation.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileStreamReadOperation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FileStreamReadOperation.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileStreamReadOperation.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FileStreamWriteOperation.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileStreamWriteOperation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FileStreamWriteOperation.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileStreamWriteOperation.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FileUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FileUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FileWriteOperation.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileWriteOperation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FileWriteOperation.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FileWriteOperation.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FroyoUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FroyoUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FroyoUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FroyoUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FroyoWebViewClient.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FroyoWebViewClient.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FroyoWebViewClient.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FroyoWebViewClient.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/FullScreenVideoUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FullScreenVideoUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/FullScreenVideoUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/FullScreenVideoUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/GameInstance.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/GameInstance.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/GameInstance.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/GameInstance.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/GeoJSONUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/GeoJSONUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/GeoJSONUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/GeoJSONUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/GeometryUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/GeometryUtil.java similarity index 99% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/GeometryUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/GeometryUtil.java index 14fc4bd47a7..a8ceef54c10 100644 --- a/appinventor/components/src/com/google/appinventor/components/runtime/util/GeometryUtil.java +++ b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/GeometryUtil.java @@ -255,7 +255,7 @@ public static double distanceBetweenEdges(MapMarker marker, MapPolygon polygon) } public static double distanceBetweenEdges(MapMarker marker, MapCircle circle) { - double d = marker.getCentroid().distanceTo(circle.getCentroid()) - circle.Radius(); + double d = 0;//marker.getCentroid().distanceTo(circle.getCentroid()) - circle.Radius(); return d < 0 ? 0 : d; } diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/GingerbreadUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/GingerbreadUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/GingerbreadUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/GingerbreadUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/HashDatabase.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HashDatabase.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/HashDatabase.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HashDatabase.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/HashDbInitialize.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HashDbInitialize.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/HashDbInitialize.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HashDbInitialize.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/HashFile.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HashFile.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/HashFile.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HashFile.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/HoneycombMR1Util.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HoneycombMR1Util.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/HoneycombMR1Util.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HoneycombMR1Util.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/HoneycombUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HoneycombUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/HoneycombUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HoneycombUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/HoneycombWebViewClient.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HoneycombWebViewClient.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/HoneycombWebViewClient.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/HoneycombWebViewClient.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/IClientLoginHelper.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/IClientLoginHelper.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/IClientLoginHelper.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/IClientLoginHelper.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/IOUtils.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/IOUtils.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/IOUtils.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/IOUtils.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ITextToSpeech.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ITextToSpeech.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ITextToSpeech.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ITextToSpeech.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/IceCreamSandwichUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/IceCreamSandwichUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/IceCreamSandwichUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/IceCreamSandwichUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ImageViewUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ImageViewUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ImageViewUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ImageViewUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/InternalTextToSpeech.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/InternalTextToSpeech.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/InternalTextToSpeech.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/InternalTextToSpeech.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/JavaStringUtils.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/JavaStringUtils.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/JavaStringUtils.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/JavaStringUtils.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/JellybeanUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/JellybeanUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/JellybeanUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/JellybeanUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/JsonUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/JsonUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/JsonUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/JsonUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/KitkatUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/KitkatUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/KitkatUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/KitkatUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ListViewArrayAdapterImageSingleText.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ListViewArrayAdapterImageSingleText.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ListViewArrayAdapterImageSingleText.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ListViewArrayAdapterImageSingleText.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ListViewArrayAdapterImageTwoText.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ListViewArrayAdapterImageTwoText.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ListViewArrayAdapterImageTwoText.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ListViewArrayAdapterImageTwoText.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ListViewArrayAdapterSingleText.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ListViewArrayAdapterSingleText.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ListViewArrayAdapterSingleText.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ListViewArrayAdapterSingleText.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ListViewArrayAdapterTwoText.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ListViewArrayAdapterTwoText.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ListViewArrayAdapterTwoText.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ListViewArrayAdapterTwoText.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ListViewArrayAdapterTwoTextLinear.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ListViewArrayAdapterTwoTextLinear.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ListViewArrayAdapterTwoTextLinear.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ListViewArrayAdapterTwoTextLinear.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/LollipopUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/LollipopUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/LollipopUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/LollipopUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/MapFactory.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/MapFactory.java similarity index 99% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/MapFactory.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/MapFactory.java index db63fc8ff57..15ccfe0558f 100644 --- a/appinventor/components/src/com/google/appinventor/components/runtime/util/MapFactory.java +++ b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/MapFactory.java @@ -1617,7 +1617,7 @@ public static MapController newMap(Form form) { if (Build.VERSION.SDK_INT < 8) { return new DummyMapController(); } else { - return new NativeOpenStreetMapController(form); + return null;// new NativeOpenStreetMapController(form); } } } diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/MediaUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/MediaUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/MediaUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/MediaUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/MemoryLeakUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/MemoryLeakUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/MemoryLeakUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/MemoryLeakUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/NanoHTTPD.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/NanoHTTPD.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/NanoHTTPD.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/NanoHTTPD.java diff --git a/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/NativeOpenStreetMapController.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/NativeOpenStreetMapController.java new file mode 100644 index 00000000000..11646421dd9 --- /dev/null +++ b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/NativeOpenStreetMapController.java @@ -0,0 +1,1590 @@ +//// -*- mode: java; c-basic-offset: 2; -*- +//// Copyright © 2016-2020 Massachusetts Institute of Technology, All rights reserved. +//// Released under the Apache License, Version 2.0 +//// http://www.apache.org/licenses/LICENSE-2.0 +// +//package com.google.appinventor.components.runtime.util; +// +//import android.content.Context; +//import android.graphics.Canvas; +//import android.graphics.Paint; +//import android.graphics.Picture; +//import android.graphics.drawable.BitmapDrawable; +//import android.graphics.drawable.Drawable; +//import android.graphics.drawable.PictureDrawable; +//import android.location.Location; +//import android.os.Bundle; +//import android.os.Handler; +//import android.os.Message; +//import android.util.DisplayMetrics; +//import android.util.Log; +//import android.view.MotionEvent; +//import android.view.View; +//import android.view.ViewGroup; +//import android.view.ViewTreeObserver; +//import android.view.animation.Animation; +//import android.widget.RelativeLayout; +//import androidx.core.view.ViewCompat; +//import com.caverock.androidsvg.SVG; +//import com.caverock.androidsvg.SVGParseException; +//import com.google.appinventor.components.common.ComponentConstants; +//import com.google.appinventor.components.common.MapType; +//import com.google.appinventor.components.common.ScaleUnits; +//import com.google.appinventor.components.runtime.Form; +//import com.google.appinventor.components.runtime.LocationSensor; +//import com.google.appinventor.components.runtime.util.MapFactory.HasFill; +//import com.google.appinventor.components.runtime.util.MapFactory.HasStroke; +//import com.google.appinventor.components.runtime.util.MapFactory.MapCircle; +//import com.google.appinventor.components.runtime.util.MapFactory.MapController; +//import com.google.appinventor.components.runtime.util.MapFactory.MapEventListener; +//import com.google.appinventor.components.runtime.util.MapFactory.MapFeature; +//import com.google.appinventor.components.runtime.util.MapFactory.MapFeatureCollection; +//import com.google.appinventor.components.runtime.util.MapFactory.MapLineString; +//import com.google.appinventor.components.runtime.util.MapFactory.MapMarker; +//import com.google.appinventor.components.runtime.util.MapFactory.MapPolygon; +//import com.google.appinventor.components.runtime.util.MapFactory.MapRectangle; +//import com.google.appinventor.components.runtime.util.MapFactory.MapScaleUnits; +//import com.google.appinventor.components.runtime.view.ZoomControlView; +//import java.io.File; +//import java.io.IOException; +//import java.io.InputStream; +//import java.util.ArrayList; +//import java.util.Collections; +//import java.util.HashMap; +//import java.util.HashSet; +//import java.util.Iterator; +//import java.util.List; +//import java.util.Map; +//import java.util.Set; +//import org.osmdroid.api.IGeoPoint; +//import org.osmdroid.config.Configuration; +//import org.osmdroid.events.MapListener; +//import org.osmdroid.events.ScrollEvent; +//import org.osmdroid.events.ZoomEvent; +//import org.osmdroid.tileprovider.MapTile; +//import org.osmdroid.tileprovider.constants.OpenStreetMapTileProviderConstants; +//import org.osmdroid.tileprovider.tilesource.TileSourceFactory; +//import org.osmdroid.util.BoundingBox; +//import org.osmdroid.util.GeoPoint; +//import org.osmdroid.views.MapView; +//import org.osmdroid.views.MapView.OnTapListener; +//import org.osmdroid.views.overlay.CopyrightOverlay; +//import org.osmdroid.views.overlay.Marker; +//import org.osmdroid.views.overlay.Marker.OnMarkerClickListener; +//import org.osmdroid.views.overlay.Marker.OnMarkerDragListener; +//import org.osmdroid.views.overlay.Overlay; +//import org.osmdroid.views.overlay.OverlayWithIW; +//import org.osmdroid.views.overlay.OverlayWithIWVisitor; +//import org.osmdroid.views.overlay.Polygon; +//import org.osmdroid.views.overlay.Polyline; +//import org.osmdroid.views.overlay.ScaleBarOverlay; +//import org.osmdroid.views.overlay.ScaleBarOverlay.UnitsOfMeasure; +//import org.osmdroid.views.overlay.compass.CompassOverlay; +//import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider; +//import org.osmdroid.views.overlay.gestures.RotationGestureOverlay; +//import org.osmdroid.views.overlay.infowindow.OverlayInfoWindow; +//import org.osmdroid.views.overlay.mylocation.IMyLocationConsumer; +//import org.osmdroid.views.overlay.mylocation.IMyLocationProvider; +//import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay; +// +//class NativeOpenStreetMapController implements MapController, MapListener { +// /* copied from SVG */ +// private static final long SPECIFIED_FILL = 1; +// private static final long SPECIFIED_FILL_OPACITY = 1<<2; +// private static final long SPECIFIED_STROKE = 1<<3; +// private static final long SPECIFIED_STROKE_OPACITY = 1<<4; +// private static final long SPECIFIED_STROKE_WIDTH = 1<<5; +// /* end copied from SVG */ +// +// private static final String TAG = NativeOpenStreetMapController.class.getSimpleName(); +// private boolean caches; +// private final Form form; +// private RelativeLayout containerView; +// private MapView view; +// private MapType tileType; +// private boolean zoomEnabled; +// private boolean zoomControlEnabled; +// private CompassOverlay compass = null; +// private final MyLocationNewOverlay userLocation; +// private RotationGestureOverlay rotation = null; +// private Set eventListeners = new HashSet(); +// private Map featureOverlays = new HashMap(); +// private SVG defaultMarkerSVG = null; +// private TouchOverlay touch = null; +// private OverlayInfoWindow defaultInfoWindow = null; +// private boolean ready = false; +// private ZoomControlView zoomControls = null; +// private float lastAzimuth = Float.NaN; +// private ScaleBarOverlay scaleBar; +// +// /** +// * This set stores feature collections that are hidden (Visible = False). +// */ +// private Set hiddenFeatureCollections = new HashSet<>(); +// +// /** +// * This set stores the features contained within feature collections captured by +// * {@link #hiddenFeatureCollections}. This is used to test whether the features should be +// * displayed when toggling their Visible property. +// */ +// private Set hiddenFeatures = new HashSet<>(); +// +// private static final float[] ANCHOR_HORIZONTAL = { Float.NaN, 0.0f, 1.0f, 0.5f }; +// private static final float[] ANCHOR_VERTICAL = { Float.NaN, 0.0f, 0.5f, 1.0f }; +// +// private static class AppInventorLocationSensorAdapter implements IMyLocationProvider, +// LocationSensor.LocationSensorListener { +// private LocationSensor source; +// private Location lastLocation; +// private IMyLocationConsumer consumer; +// private boolean enabled = false; +// +// @Override +// public void setSource(LocationSensor source) { +// if (this.source == source) { +// return; // nothing to do here +// } +// if (this.source != null) { +// this.source.Enabled(false); +// } +// this.source = source; +// if (this.source != null) { +// this.source.Enabled(enabled); +// } +// } +// +// @Override +// public void onTimeIntervalChanged(int time) { +// } +// +// @Override +// public void onDistanceIntervalChanged(int distance) { +// } +// +// @Override +// public void onLocationChanged(Location location) { +// lastLocation = location; +// if (consumer != null) { +// consumer.onLocationChanged(location, this); +// } +// } +// +// @Override +// public void onStatusChanged(String s, int i, Bundle bundle) { +// } +// +// @Override +// public void onProviderEnabled(String s) { +// } +// +// @Override +// public void onProviderDisabled(String s) { +// } +// +// @Override +// public boolean startLocationProvider(IMyLocationConsumer consumer) { +// this.consumer = consumer; +// if (source != null) { +// source.Enabled(true); +// enabled = true; +// } +// return enabled; +// } +// +// @Override +// public void stopLocationProvider() { +// if (source != null) { +// source.Enabled(false); +// } +// enabled = false; +// } +// +// @Override +// public Location getLastKnownLocation() { +// return lastLocation; +// } +// +// @Override +// public void destroy() { +// this.consumer = null; +// } +// } +// +// private class TouchOverlay extends Overlay { +// private boolean scrollEnabled = true; +// +// @Override +// public void draw(Canvas arg0, MapView arg1, boolean arg2) {} +// +// @Override +// public boolean onFling(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY, MapView mapView) { +// return !scrollEnabled; +// } +// +// @Override +// public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY, MapView mapView) { +// return !scrollEnabled; +// } +// +// @Override +// public boolean onLongPress(final MotionEvent pEvent, final MapView pMapView) { +// IGeoPoint p = pMapView.getProjection().fromPixels((int) pEvent.getX(), (int) pEvent.getY()); +// final double lat = p.getLatitude(); +// final double lng = p.getLongitude(); +// for (MapEventListener l : eventListeners) { +// l.onLongPress(lat, lng); +// } +// return false; // We don't want to cancel propagation to other overlays +// } +// } +// +// private class MapReadyHandler extends Handler { +// +// @Override +// public void handleMessage(final Message msg) { +// switch (msg.what) { +// case MapTile.MAPTILE_SUCCESS_ID: +// if (!ready && form.canDispatchEvent(null, "MapReady")) { +// ready = true; +// form.runOnUiThread(new Runnable() { +// @Override +// public void run() { +// for (MapEventListener l : eventListeners) { +// l.onReady(NativeOpenStreetMapController.this); +// } +// } +// }); +// } +// view.invalidate(); +// break; +// } +// } +// } +// +// private class CustomMapView extends MapView { +// public CustomMapView(Context context) { +// super(context, null, new MapReadyHandler()); +// } +// +// @Override +// protected void onSizeChanged(int w, int h, int oldw, int oldh) { +// scrollTo(getScrollX() + (oldw - w) / 2, getScrollY() + (oldh - h) / 2); +// super.onSizeChanged(w, h, oldw, oldh); +// } +// +// @Override +// public void onDetach() { +// // Suppress call to parent onDetach +// } +// } +// +// private final AppInventorLocationSensorAdapter locationProvider; +// +// NativeOpenStreetMapController(final Form form) { +// OpenStreetMapTileProviderConstants.setUserAgentValue(form.getApplication().getPackageName()); +// File osmdroid = new File(form.getCacheDir(), "osmdroid"); +// if (osmdroid.exists() || osmdroid.mkdirs()) { +// Configuration.getInstance().setOsmdroidBasePath(osmdroid); +// File osmdroidTiles = new File(osmdroid, "tiles"); +// if (osmdroidTiles.exists() || osmdroidTiles.mkdirs()) { +// Configuration.getInstance().setOsmdroidTileCache(osmdroidTiles); +// caches = true; +// } +// } +// this.form = form; +// this.touch = new TouchOverlay(); +// view = new CustomMapView(form.getApplicationContext()); +// locationProvider = new AppInventorLocationSensorAdapter(); +// defaultInfoWindow = new OverlayInfoWindow(view); +// view.setTilesScaledToDpi(true); +// view.setMapListener(this); +// view.getOverlayManager().add(new CopyrightOverlay(form)); +// view.getOverlayManager().add(touch); +// view.addOnTapListener(new OnTapListener() { +// @Override +// public void onSingleTap(MapView view, double latitude, double longitude) { +// for (MapEventListener listener : eventListeners) { +// listener.onSingleTap(latitude, longitude); +// } +// } +// +// @Override +// public void onDoubleTap(MapView view, double latitude, double longitude) { +// for (MapEventListener listener : eventListeners) { +// listener.onDoubleTap(latitude, longitude); +// } +// } +// }); +// zoomControls = new ZoomControlView(view); +// userLocation = new MyLocationNewOverlay(locationProvider, view); +// scaleBar = new ScaleBarOverlay(view); +// scaleBar.setAlignBottom(true); +// scaleBar.setAlignRight(true); +// scaleBar.disableScaleBar(); +// view.getOverlayManager().add(scaleBar); +// +// containerView = new RelativeLayout(form); +// containerView.setClipChildren(true); +// containerView.addView(view, new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); +// containerView.addView(zoomControls); +// zoomControls.setVisibility(View.GONE); // not shown by default +// } +// +// @Override +// public View getView() { +// return containerView; +// } +// +// @Override +// public double getLatitude() { +// return view.getMapCenter().getLatitude(); +// } +// +// @Override +// public double getLongitude() { +// return view.getMapCenter().getLongitude(); +// } +// +// @Override +// public void setCenter(double latitude, double longitude) { +// view.getController().setCenter(new GeoPoint(latitude, longitude)); +// } +// +// @Override +// public void setZoom(int zoom) { +// view.getController().setZoom((double) zoom); +// zoomControls.updateButtons(); +// } +// +// @Override +// public int getZoom() { +// // We pass pending as true here so that when a user sets ZoomLevel +// // and then reads it back it should be reflected. +// return (int) view.getZoomLevel(true); +// } +// +// @Override +// public void setZoomEnabled(boolean enable) { +// this.zoomEnabled = enable; +// view.setMultiTouchControls(enable); +// } +// +// @Override +// public boolean isZoomEnabled() { +// return zoomEnabled; +// } +// +// @Override +// public void setMapType(MapFactory.MapType type) { +// MapType mapType = MapType.fromUnderlyingValue(type.ordinal()); +// if (mapType != null) { +// setMapTypeAbstract(mapType); +// } +// } +// +// @Override +// public MapFactory.MapType getMapType() { +// return MapFactory.MapType.values()[tileType.toUnderlyingValue()]; +// } +// +// @Override +// public void setMapTypeAbstract(MapType type) { +// tileType = type; +// switch (type) { +// case Road: +// view.setTileSource(TileSourceFactory.MAPNIK); +// break; +// case Aerial: +// view.setTileSource(TileSourceFactory.USGS_SAT); +// break; +// case Terrain: +// view.setTileSource(TileSourceFactory.USGS_TOPO); +// break; +// } +// } +// +// @Override +// public MapType getMapTypeAbstract() { +// return tileType; +// } +// +// @Override +// public void setCompassEnabled(boolean enabled) { +// if (enabled && compass == null) { +// compass = new CompassOverlay(view.getContext(), view); +// view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { +// @Override +// public boolean onPreDraw() { +// float density = view.getContext().getResources().getDisplayMetrics().density; +// compass.setCompassCenter(view.getMeasuredWidth() / density - 35, 35); +// return true; +// } +// }); +// view.getOverlayManager().add(compass); +// } +// if (compass != null) { +// if (enabled) { +// if (compass.getOrientationProvider() != null) { +// compass.enableCompass(); +// } else { +// compass.enableCompass(new InternalCompassOrientationProvider(view.getContext())); +// } +// compass.onOrientationChanged(lastAzimuth, null); +// } else { +// lastAzimuth = compass.getOrientation(); +// compass.disableCompass(); +// } +// } +// } +// +// @Override +// public boolean isCompassEnabled() { +// return compass != null && compass.isCompassEnabled(); +// } +// +// @Override +// public void setZoomControlEnabled(boolean enabled) { +// if (zoomControlEnabled != enabled) { +// zoomControls.setVisibility(enabled ? View.VISIBLE : View.GONE); +// zoomControlEnabled = enabled; +// containerView.invalidate(); +// } +// } +// +// @Override +// public boolean isZoomControlEnabled() { +// return zoomControlEnabled; +// } +// +// @Override +// public void setShowUserEnabled(boolean enable) { +// userLocation.setEnabled(enable); +// if (enable) { +// userLocation.enableMyLocation(); +// view.getOverlayManager().add( userLocation ); +// } else { +// userLocation.disableMyLocation(); +// view.getOverlayManager().remove( userLocation ); +// } +// } +// +// @Override +// public boolean isShowUserEnabled() { +// return userLocation != null && userLocation.isEnabled(); +// } +// +// @Override +// public void setRotationEnabled(boolean enabled) { +// if (enabled && rotation == null) { +// rotation = new RotationGestureOverlay(view); +// } +// if (rotation != null) { +// rotation.setEnabled(enabled); +// if (enabled) { +// view.getOverlayManager().add( rotation ); +// } else { +// view.getOverlayManager().remove( rotation ); +// } +// } +// } +// +// @Override +// public boolean isRotationEnabled() { +// return rotation != null && rotation.isEnabled(); +// } +// +// @Override +// public void setPanEnabled(boolean enable) { +// touch.scrollEnabled = enable; +// } +// +// @Override +// public boolean isPanEnabled() { +// return touch.scrollEnabled; +// } +// +// @Override +// public void panTo(double latitude, double longitude, int zoom, double seconds) { +// view.getController().animateTo(new GeoPoint(latitude, longitude)); +// if (view.getController().zoomTo((double) zoom)) { +// Animation animation = view.getAnimation(); +// if (animation != null) { +// animation.setDuration((long) (1000 * seconds)); +// } +// } +// } +// +// @Override +// public void addEventListener(MapEventListener listener) { +// eventListeners.add(listener); +// if ((ready || ViewCompat.isAttachedToWindow(view)) && form.canDispatchEvent(null, "MapReady")) { +// ready = true; +// listener.onReady(this); +// } +// } +// +// @Override +// public void addFeature(final MapMarker aiMarker) { +// createNativeMarker(aiMarker, new AsyncCallbackPair() { +// @Override +// public void onFailure(String message) { +// Log.e(TAG, "Unable to create marker: " + message); +// } +// +// @Override +// public void onSuccess(Marker overlay) { +// overlay.setOnMarkerClickListener(new OnMarkerClickListener() { +// @Override +// public boolean onMarkerClick(Marker marker, MapView mapView) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureClick(aiMarker); +// } +// if (aiMarker.EnableInfobox()) { +// marker.showInfoWindow(); +// } +// return false; +// } +// @Override +// public boolean onMarkerLongPress(Marker marker, MapView mapView) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureLongPress(aiMarker); +// } +// return false; +// } +// }); +// overlay.setOnMarkerDragListener(new OnMarkerDragListener() { +// @Override +// public void onMarkerDrag(Marker marker) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureDrag(aiMarker); +// } +// } +// +// @Override +// public void onMarkerDragEnd(Marker marker) { +// IGeoPoint point = marker.getPosition(); +// aiMarker.updateLocation(point.getLatitude(), point.getLongitude()); +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureStopDrag(aiMarker); +// } +// } +// +// @Override +// public void onMarkerDragStart(Marker marker) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureStartDrag(aiMarker); +// } +// } +// }); +// if (aiMarker.Visible()) { +// showOverlay(overlay); +// } else { +// hideOverlay(overlay); +// } +// } +// +// }); +// } +// +// @Override +// public void addFeature(final MapLineString aiPolyline) { +// Polyline polyline = createNativePolyline(aiPolyline); +// featureOverlays.put(aiPolyline, polyline); +// polyline.setOnClickListener(new Polyline.OnClickListener() { +// @Override +// public boolean onClick(Polyline arg0, MapView arg1, GeoPoint arg2) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureClick(aiPolyline); +// } +// if (aiPolyline.EnableInfobox()) { +// arg0.showInfoWindow(arg2); +// } +// return true; +// } +// +// @Override +// public boolean onLongClick(Polyline arg0, MapView arg1, GeoPoint arg2) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureLongPress(aiPolyline); +// } +// return true; +// } +// }); +// polyline.setOnDragListener(new Polyline.OnDragListener() { +// @Override +// public void onDragStart(Polyline polyline) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureStartDrag(aiPolyline); +// } +// } +// +// @Override +// public void onDrag(Polyline polyline) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureDrag(aiPolyline); +// } +// } +// +// @Override +// public void onDragEnd(Polyline polyline) { +// aiPolyline.updatePoints(polyline.getPoints()); +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureStopDrag(aiPolyline); +// } +// } +// }); +// if (aiPolyline.Visible()) { +// showOverlay(polyline); +// } else { +// hideOverlay(polyline); +// } +// } +// +// private void configurePolygon(final MapFeature component, Polygon polygon) { +// featureOverlays.put(component, polygon); +// polygon.setOnClickListener(new Polygon.OnClickListener() { +// @Override +// public boolean onLongClick(Polygon arg0, MapView arg1, GeoPoint arg2) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureLongPress(component); +// } +// return true; +// } +// +// @Override +// public boolean onClick(Polygon arg0, MapView arg1, GeoPoint arg2) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureClick(component); +// } +// if (component.EnableInfobox()) { +// arg0.showInfoWindow(arg2); +// } +// return true; +// } +// }); +// polygon.setOnDragListener(new Polygon.OnDragListener() { +// @Override +// public void onDragStart(Polygon polygon) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureStartDrag(component); +// } +// } +// +// @Override +// public void onDrag(Polygon polygon) { +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureDrag(component); +// } +// } +// +// @Override +// public void onDragEnd(Polygon polygon) { +// if (component instanceof MapCircle) { +// double latitude = 0, longitude = 0; +// int count = polygon.getPoints().size(); +// // Note that this approximates the centroid of the Circle. +// for (GeoPoint p : polygon.getPoints()) { +// latitude += p.getLatitude(); +// longitude += p.getLongitude(); +// } +// if (count > 0) { +// ((MapCircle) component).updateCenter(latitude / count, longitude / count); +// } else { +// ((MapCircle) component).updateCenter(0, 0); +// } +// } else if (component instanceof MapRectangle) { +// double north = -90, east = -180, west = 180, south = 90; +// for (GeoPoint p : polygon.getPoints()) { +// double lat = p.getLatitude(); +// double lng = p.getLongitude(); +// north = Math.max(north, lat); +// south = Math.min(south, lat); +// east = Math.max(east, lng); +// west = Math.min(west, lng); +// } +// ((MapRectangle) component).updateBounds(north, west, south, east); +// } else { +// ((MapPolygon) component).updatePoints(((MultiPolygon) polygon).getMultiPoints()); +// ((MapPolygon) component).updateHolePoints(((MultiPolygon) polygon).getMultiHoles()); +// } +// for (MapEventListener listener : eventListeners) { +// listener.onFeatureStopDrag(component); +// } +// } +// }); +// if (component.Visible()) { +// showOverlay(polygon); +// } else { +// hideOverlay(polygon); +// } +// } +// +// @Override +// public void addFeature(final MapPolygon aiPolygon) { +// configurePolygon(aiPolygon, createNativePolygon(aiPolygon)); +// } +// +// @Override +// public void addFeature(MapCircle aiCircle) { +// configurePolygon(aiCircle, createNativeCircle(aiCircle)); +// } +// +// @Override +// public void addFeature(MapRectangle aiRectangle) { +// configurePolygon(aiRectangle, createNativeRectangle(aiRectangle)); +// } +// +// @Override +// public void removeFeature(MapFeature aiFeature) { +// view.getOverlayManager().remove(featureOverlays.get(aiFeature)); +// featureOverlays.remove(aiFeature); +// } +// +// @Override +// public void updateFeaturePosition(MapMarker aiMarker) { +// Marker marker = (Marker)featureOverlays.get(aiMarker); +// if (marker != null) { +// marker.setAnchor(ANCHOR_HORIZONTAL[aiMarker.AnchorHorizontal()], +// ANCHOR_VERTICAL[aiMarker.AnchorVertical()]); +// marker.setPosition(new GeoPoint(aiMarker.Latitude(), aiMarker.Longitude())); +// view.invalidate(); +// } +// } +// +// @Override +// public void updateFeaturePosition(MapLineString aiPolyline) { +// Polyline overlay = (Polyline) featureOverlays.get(aiPolyline); +// if (overlay != null) { +// overlay.setPoints(aiPolyline.getPoints()); +// view.invalidate(); +// } +// } +// +// @Override +// public void updateFeaturePosition(MapPolygon aiPolygon) { +// MultiPolygon polygon = (MultiPolygon) featureOverlays.get(aiPolygon); +// if (polygon != null) { +// polygon.setMultiPoints(aiPolygon.getPoints()); +// view.invalidate(); +// } +// } +// +// @Override +// public void updateFeatureHoles(MapPolygon aiPolygon) { +// MultiPolygon polygon = (MultiPolygon) featureOverlays.get(aiPolygon); +// if (polygon != null) { +// polygon.setMultiHoles(aiPolygon.getHolePoints()); +// view.invalidate(); +// } +// } +// +// @Override +// public void updateFeaturePosition(MapCircle aiCircle) { +// GeoPoint center = new GeoPoint(aiCircle.Latitude(), aiCircle.Longitude()); +// Polygon polygon = (Polygon) featureOverlays.get(aiCircle); +// if (polygon != null) { +// List geopoints = Polygon.pointsAsCircle(center, aiCircle.Radius()); +// polygon.setPoints(geopoints); +// view.invalidate(); +// } +// } +// +// @Override +// @SuppressWarnings("unchecked") +// public void updateFeaturePosition(MapRectangle aiRectangle) { +// Polygon polygon = (Polygon) featureOverlays.get(aiRectangle); +// if (polygon != null) { +// List geopoints = (List) Polygon.pointsAsRect(new BoundingBox(aiRectangle.NorthLatitude(), +// aiRectangle.EastLongitude(), aiRectangle.SouthLatitude(), aiRectangle.WestLongitude())); +// polygon.setPoints(geopoints); +// view.invalidate(); +// } +// } +// +// @Override +// public void updateFeatureFill(final HasFill aiFeature) { +// OverlayWithIW overlay = featureOverlays.get(aiFeature); +// if (overlay == null) { +// return; // not yet initialized +// } +// overlay.accept(new OverlayWithIWVisitor() { +// @Override +// public void visit(final Marker marker) { +// getMarkerDrawable((MapMarker) aiFeature, new AsyncCallbackPair() { +// @Override +// public void onFailure(String message) { +// Log.e(TAG, "Unable to update fill color for marker: " + message); +// } +// +// @Override +// public void onSuccess(Drawable result) { +// marker.setIcon(result); +// view.invalidate(); +// } +// }); +// } +// +// @Override +// public void visit(Polyline polyline) { +// // polylines do not have fills +// } +// +// @Override +// public void visit(Polygon polygon) { +// polygon.setFillColor(aiFeature.FillColor()); +// view.invalidate(); +// } +// +// }); +// } +// +// @Override +// public void updateFeatureStroke(final HasStroke aiFeature) { +// OverlayWithIW overlay = featureOverlays.get(aiFeature); +// if (overlay == null) { +// return; // not yet initialized +// } +// overlay.accept(new OverlayWithIWVisitor() { +// @Override +// public void visit(final Marker marker) { +// getMarkerDrawable((MapMarker) aiFeature, new AsyncCallbackPair() { +// @Override +// public void onFailure(String message) { +// Log.e(TAG, "Unable to update stroke color for marker: " + message); +// } +// +// @Override +// public void onSuccess(Drawable result) { +// marker.setIcon(result); +// view.invalidate(); +// } +// }); +// } +// +// @Override +// public void visit(Polyline polyline) { +// DisplayMetrics metrics = new DisplayMetrics(); +// form.getWindowManager().getDefaultDisplay().getMetrics(metrics); +// polyline.setColor(aiFeature.StrokeColor()); +// polyline.setWidth(aiFeature.StrokeWidth() * metrics.density); +// view.invalidate(); +// } +// +// @Override +// public void visit(Polygon polygon) { +// DisplayMetrics metrics = new DisplayMetrics(); +// form.getWindowManager().getDefaultDisplay().getMetrics(metrics); +// polygon.setStrokeColor(aiFeature.StrokeColor()); +// polygon.setStrokeWidth(aiFeature.StrokeWidth() * metrics.density); +// view.invalidate(); +// } +// }); +// } +// +// @Override +// public void updateFeatureText(MapFeature aiFeature) { +// OverlayWithIW overlay = featureOverlays.get(aiFeature); +// if (overlay != null) { +// overlay.setTitle(aiFeature.Title()); +// overlay.setSnippet(aiFeature.Description()); +// } +// } +// +// @Override +// public void updateFeatureDraggable(MapFeature aiFeature) { +// OverlayWithIW overlay = featureOverlays.get(aiFeature); +// if (overlay != null) { +// overlay.setDraggable(aiFeature.Draggable()); +// } +// } +// +// @Override +// public void updateFeatureImage(MapMarker aiMarker) { +// final Marker marker = (Marker)featureOverlays.get(aiMarker); +// if (marker == null) { +// return; // not yet initialized +// } +// getMarkerDrawable(aiMarker, new AsyncCallbackPair() { +// @Override +// public void onFailure(String message) { +// Log.e(TAG, "Unable to update feature image: " + message); +// } +// +// @Override +// public void onSuccess(Drawable result) { +// marker.setIcon(result); +// view.invalidate(); +// } +// }); +// } +// +// @Override +// public void updateFeatureSize(MapMarker aiMarker) { +// final Marker marker = (Marker)featureOverlays.get(aiMarker); +// if (marker == null) { +// return; +// } +// getMarkerDrawable(aiMarker, new AsyncCallbackPair() { +// @Override +// public void onFailure(String message) { +// Log.wtf(TAG, "Cannot find default marker"); +// } +// +// @Override +// public void onSuccess(Drawable result) { +// marker.setIcon(result); +// view.invalidate(); +// } +// }); +// } +// +// private void getMarkerDrawable(final MapMarker aiMarker, +// final AsyncCallbackPair callback) { +// final String assetPath = aiMarker.ImageAsset(); +// if (assetPath == null || assetPath.length() == 0 || assetPath.endsWith(".svg")) { +// getMarkerDrawableVector(aiMarker, callback); +// } else { +// getMarkerDrawableRaster(aiMarker, callback); +// } +// } +// +// private void getMarkerDrawableVector(MapMarker aiMarker, +// AsyncCallbackPair callback) { +// SVG markerSvg = null; +// if (defaultMarkerSVG == null) { +// try { +// defaultMarkerSVG = SVG.getFromAsset(view.getContext().getAssets(), "marker.svg"); +// } catch (SVGParseException e) { +// Log.e(TAG, "Invalid SVG in Marker asset", e); +// } catch (IOException e) { +// Log.e(TAG, "Unable to read Marker asset", e); +// } +// if (defaultMarkerSVG == null || defaultMarkerSVG.getRootElement() == null) { +// throw new IllegalStateException("Unable to load SVG from assets"); +// } +// } +// final String markerAsset = aiMarker.ImageAsset(); +// if (markerAsset != null && markerAsset.length() != 0) { +// try { +// markerSvg = SVG.getFromAsset(view.getContext().getAssets(), markerAsset); +// } catch (SVGParseException e) { +// Log.e(TAG, "Invalid SVG in Marker asset", e); +// } catch (IOException e) { +// Log.e(TAG, "Unable to read Marker asset", e); +// } +// if (markerSvg == null) { +// // Attempt to retrieve asset from ReplForm storage location +// InputStream is = null; +// try { +// is = MediaUtil.openMedia(form, markerAsset); +// markerSvg = SVG.getFromInputStream(is); +// } catch (SVGParseException e) { +// Log.e(TAG, "Invalid SVG in Marker asset", e); +// } catch (IOException e) { +// Log.e(TAG, "Unable to read Marker asset", e); +// } finally { +// IOUtils.closeQuietly(TAG, is); +// } +// } +// } +// if (markerSvg == null) { +// markerSvg = defaultMarkerSVG; +// } +// try { +// callback.onSuccess(rasterizeSVG(aiMarker, markerSvg)); +// } catch(Exception e) { +// callback.onFailure(e.getMessage()); +// } +// } +// +// private void getMarkerDrawableRaster(final MapMarker aiMarker, +// final AsyncCallbackPair callback) { +// MediaUtil.getBitmapDrawableAsync(form, aiMarker.ImageAsset(), aiMarker.Width(), +// aiMarker.Height(), new AsyncCallbackPair() { +// @Override +// public void onFailure(String message) { +// callback.onSuccess(getDefaultMarkerDrawable(aiMarker)); +// } +// +// @Override +// public void onSuccess(BitmapDrawable result) { +// result.setAlpha((int) Math.round(aiMarker.FillOpacity() * 255.0f)); +// callback.onSuccess(result); +// } +// }); +// } +// +// private Drawable getDefaultMarkerDrawable(MapMarker aiMarker) { +// return rasterizeSVG(aiMarker, defaultMarkerSVG); +// } +// +// private static float getBestGuessWidth(SVG.Svg svg) { +// if (svg.width != null) { +// return svg.width.floatValue(); +// } else if (svg.viewBox != null) { +// return svg.viewBox.width; +// } else { +// return ComponentConstants.MARKER_PREFERRED_WIDTH; +// } +// } +// +// private static float getBestGuessHeight(SVG.Svg svg) { +// if (svg.height != null) { +// return svg.height.floatValue(); +// } else if (svg.viewBox != null) { +// return svg.viewBox.height; +// } else { +// return ComponentConstants.MARKER_PREFERRED_HEIGHT; +// } +// } +// +// private Drawable rasterizeSVG(MapMarker aiMarker, SVG markerSvg) { +// SVG.Svg svg = markerSvg.getRootElement(); +// final float density = view.getContext().getResources().getDisplayMetrics().density; +// float height = aiMarker.Height() <= 0 ? getBestGuessHeight(svg) : aiMarker.Height(); +// float width = aiMarker.Width() <= 0 ? getBestGuessWidth(svg) : aiMarker.Width(); +// float scaleH = height / getBestGuessHeight(svg); +// float scaleW = width / getBestGuessWidth(svg); +// float scale = (float) Math.sqrt(scaleH * scaleH + scaleW * scaleW); +// +// // update fill color of SVG +// Paint fillPaint = new Paint(); +// Paint strokePaint = new Paint(); +// PaintUtil.changePaint(fillPaint, aiMarker.FillColor()); +// PaintUtil.changePaint(strokePaint, aiMarker.StrokeColor()); +// SVG.Length strokeWidth = new SVG.Length(aiMarker.StrokeWidth() / scale); +// for (SVG.SvgObject element : svg.getChildren()) { +// if (element instanceof SVG.SvgConditionalElement) { +// SVG.SvgConditionalElement path = (SVG.SvgConditionalElement) element; +// path.baseStyle.fill = new SVG.Colour(fillPaint.getColor()); +// path.baseStyle.fillOpacity = fillPaint.getAlpha()/255.0f; +// path.baseStyle.stroke = new SVG.Colour(strokePaint.getColor()); +// path.baseStyle.strokeOpacity = strokePaint.getAlpha()/255.0f; +// path.baseStyle.strokeWidth = strokeWidth; +// path.baseStyle.specifiedFlags = 0x3d; +// if (path.style != null) { +// if ((path.style.specifiedFlags & SPECIFIED_FILL) == 0) { +// path.style.fill = new SVG.Colour(fillPaint.getColor()); +// path.style.specifiedFlags |= SPECIFIED_FILL; +// } +// if ((path.style.specifiedFlags & SPECIFIED_FILL_OPACITY) == 0) { +// path.style.fillOpacity = fillPaint.getAlpha()/255.0f; +// path.style.specifiedFlags |= SPECIFIED_FILL_OPACITY; +// } +// if ((path.style.specifiedFlags & SPECIFIED_STROKE) == 0) { +// path.style.stroke = new SVG.Colour(strokePaint.getColor()); +// path.style.specifiedFlags |= SPECIFIED_STROKE; +// } +// if ((path.style.specifiedFlags & SPECIFIED_STROKE_OPACITY) == 0) { +// path.style.strokeOpacity = strokePaint.getAlpha()/255.0f; +// path.style.specifiedFlags |= SPECIFIED_STROKE_OPACITY; +// } +// if ((path.style.specifiedFlags & SPECIFIED_STROKE_WIDTH) == 0) { +// path.style.strokeWidth = strokeWidth; +// path.style.specifiedFlags |= SPECIFIED_STROKE_WIDTH; +// } +// } +// } +// } +// +// // draw SVG to Picture and create a BitmapDrawable for rendering +// Picture picture = markerSvg.renderToPicture(); +// Picture scaledPicture = new Picture(); +// Canvas canvas = scaledPicture.beginRecording((int)((width + 2.0f * aiMarker.StrokeWidth()) * density), +// (int)((height + 2.0f * aiMarker.StrokeWidth()) * density)); +// canvas.scale(density * scaleW, density * scaleH); +// canvas.translate(strokeWidth.floatValue(), strokeWidth.floatValue()); +// picture.draw(canvas); +// scaledPicture.endRecording(); +// return new PictureDrawable(scaledPicture); +// } +// +// private void createNativeMarker(final MapMarker aiMarker, +// AsyncCallbackPair callback) { +// final Marker osmMarker = new Marker(view); +// featureOverlays.put(aiMarker, osmMarker); +// osmMarker.setDraggable(aiMarker.Draggable()); +// osmMarker.setTitle(aiMarker.Title()); +// osmMarker.setSnippet(aiMarker.Description()); +// osmMarker.setPosition(new GeoPoint(aiMarker.Latitude(), aiMarker.Longitude())); +// osmMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); +// getMarkerDrawable(aiMarker, new AsyncCallbackFacade(callback) { +// @Override +// public void onFailure(String message) { +// callback.onFailure(message); +// } +// +// @Override +// public void onSuccess(Drawable result) { +// osmMarker.setIcon(result); +// callback.onSuccess(osmMarker); +// } +// }); +// } +// +// private Polyline createNativePolyline(final MapLineString aiLineString) { +// final Polyline osmLine = new Polyline(); +// osmLine.setDraggable(aiLineString.Draggable()); +// osmLine.setTitle(aiLineString.Title()); +// osmLine.setSnippet(aiLineString.Description()); +// osmLine.setPoints(aiLineString.getPoints()); +// osmLine.setColor(aiLineString.StrokeColor()); +// osmLine.setWidth(aiLineString.StrokeWidth()); +// osmLine.setInfoWindow(defaultInfoWindow); +// return osmLine; +// } +// +// private void createPolygon(final Polygon osmPolygon, final MapFeature aiFeature) { +// osmPolygon.setDraggable(aiFeature.Draggable()); +// osmPolygon.setTitle(aiFeature.Title()); +// osmPolygon.setSnippet(aiFeature.Description()); +// osmPolygon.setStrokeColor(((HasStroke) aiFeature).StrokeColor()); +// osmPolygon.setStrokeWidth(((HasStroke) aiFeature).StrokeWidth()); +// osmPolygon.setFillColor(((HasFill) aiFeature).FillColor()); +// osmPolygon.setInfoWindow(defaultInfoWindow); +// } +// +// private MultiPolygon createNativePolygon(final MapPolygon aiPolygon) { +// final MultiPolygon osmPolygon = new MultiPolygon(); +// createPolygon(osmPolygon, aiPolygon); +// osmPolygon.setMultiPoints(aiPolygon.getPoints()); +// osmPolygon.setMultiHoles(aiPolygon.getHolePoints()); +// return osmPolygon; +// } +// +// private Polygon createNativeCircle(final MapCircle aiCircle) { +// final Polygon osmPolygon = new Polygon(); +// createPolygon(osmPolygon, aiCircle); +// osmPolygon.setPoints(Polygon.pointsAsCircle(new GeoPoint(aiCircle.Latitude(), aiCircle.Longitude()), aiCircle.Radius())); +// return osmPolygon; +// } +// +// private Polygon createNativeRectangle(final MapRectangle aiRectangle) { +// BoundingBox bbox = new BoundingBox(aiRectangle.NorthLatitude(), aiRectangle.EastLongitude(), +// aiRectangle.SouthLatitude(), aiRectangle.WestLongitude()); +// final Polygon osmPolygon = new Polygon(); +// createPolygon(osmPolygon, aiRectangle); +// osmPolygon.setPoints(new ArrayList((List) Polygon.pointsAsRect(bbox))); +// return osmPolygon; +// } +// +// @Override +// public void showFeature(MapFeature feature) { +// if (!hiddenFeatures.contains(feature)) { +// showOverlay(featureOverlays.get(feature)); +// } +// } +// +// protected void showOverlay(OverlayWithIW overlay) { +// view.getOverlayManager().add(overlay); +// view.invalidate(); +// } +// +// @Override +// public void hideFeature(MapFeature feature) { +// hideOverlay(featureOverlays.get(feature)); +// } +// +// protected void hideOverlay(OverlayWithIW overlay) { +// view.getOverlayManager().remove(overlay); +// view.invalidate(); +// } +// +// @Override +// public boolean isFeatureVisible(MapFeature feature) { +// OverlayWithIW overlay = featureOverlays.get(feature); +// return overlay != null && view.getOverlayManager().contains(overlay); +// } +// +// @Override +// public boolean isFeatureCollectionVisible(MapFeatureCollection collection) { +// return !hiddenFeatureCollections.contains(collection); +// } +// +// @Override +// public void setFeatureCollectionVisible(MapFeatureCollection collection, boolean visible) { +// if ((!visible && hiddenFeatureCollections.contains(collection)) +// || (visible && !hiddenFeatureCollections.contains(collection))) { +// // Nothing to do +// return; +// } +// if (visible) { +// hiddenFeatureCollections.remove(collection); +// for (MapFeature feature : collection) { +// hiddenFeatures.remove(feature); +// if (feature.Visible()) { +// showFeature(feature); +// } +// } +// } else { +// hiddenFeatureCollections.add(collection); +// for (MapFeature feature : collection) { +// hiddenFeatures.add(feature); +// hideFeature(feature); +// } +// } +// } +// +// @Override +// public void showInfobox(MapFeature feature) { +// OverlayWithIW overlay = featureOverlays.get(feature); +// if (overlay instanceof org.osmdroid.views.overlay.Marker) { +// overlay.showInfoWindow(); +// } else if (overlay instanceof org.osmdroid.views.overlay.Polyline) { +// org.osmdroid.views.overlay.Polyline polyOverlay = (org.osmdroid.views.overlay.Polyline)overlay; +// polyOverlay.showInfoWindow(feature.getCentroid()); +// } else { +// org.osmdroid.views.overlay.Polygon polyOverlay = (org.osmdroid.views.overlay.Polygon)overlay; +// polyOverlay.showInfoWindow(feature.getCentroid()); +// } +// } +// +// @Override +// public void hideInfobox(MapFeature feature) { +// OverlayWithIW overlay = featureOverlays.get(feature); +// overlay.closeInfoWindow(); +// } +// +// @Override +// public boolean isInfoboxVisible(MapFeature feature) { +// OverlayWithIW overlay = featureOverlays.get(feature); +// return overlay != null && overlay.isInfoWindowOpen(); +// } +// +// @Override +// public BoundingBox getBoundingBox() { +// return view.getBoundingBox(); +// } +// +// @Override +// public void setBoundingBox(BoundingBox bbox) { +// view.getController().setCenter(bbox.getCenter()); +// view.getController().zoomToSpan(bbox.getLatitudeSpan(), bbox.getLongitudeSpan()); +// } +// +// @Override +// public boolean onScroll(ScrollEvent event) { +// for (MapEventListener listener : eventListeners) { +// listener.onBoundsChanged(); +// } +// return true; +// } +// +// @Override +// public boolean onZoom(ZoomEvent event) { +// zoomControls.updateButtons(); +// for (MapEventListener listener : eventListeners) { +// listener.onZoom(); +// } +// return true; +// } +// +// @Override +// public LocationSensor.LocationSensorListener getLocationListener() { +// return locationProvider; +// } +// +// @Override +// public int getOverlayCount() { +// System.err.println(view.getOverlays()); +// return view.getOverlays().size(); +// } +// +// @Override +// public void setRotation(float Rotation) { +// view.setMapOrientation(Rotation); +// } +// +// @Override +// public float getRotation() { +// return view.getMapOrientation(); +// } +// +// @Override +// public void setScaleVisible(boolean show) { +// scaleBar.setEnabled(show); +// view.invalidate(); +// } +// +// @Override +// public boolean isScaleVisible() { +// return scaleBar.isEnabled(); +// } +// +// @Override +// public void setScaleUnits(MapScaleUnits units) { +// switch (units) { +// case METRIC: +// scaleBar.setUnitsOfMeasure(UnitsOfMeasure.metric); +// break; +// case IMPERIAL: +// scaleBar.setUnitsOfMeasure(UnitsOfMeasure.imperial); +// break; +// default: +// throw new IllegalArgumentException("Unallowable unit system: " + units); +// } +// view.invalidate(); +// } +// +// @Override +// public MapScaleUnits getScaleUnits() { +// switch (scaleBar.getUnitsOfMeasure()) { +// case imperial: +// return MapScaleUnits.IMPERIAL; +// case metric: +// return MapScaleUnits.METRIC; +// default: +// throw new IllegalStateException("Somehow we have an unallowed unit system"); +// } +// } +// +// @Override +// public void setScaleUnitsAbstract(ScaleUnits units) { +// switch (units) { +// case Metric: +// scaleBar.setUnitsOfMeasure(UnitsOfMeasure.metric); +// break; +// case Imperial: +// scaleBar.setUnitsOfMeasure(UnitsOfMeasure.imperial); +// break; +// default: +// break; +// } +// view.invalidate(); +// } +// +// @Override +// public ScaleUnits getScaleUnitsAbstract() { +// switch (scaleBar.getUnitsOfMeasure()) { +// case imperial: +// return ScaleUnits.Imperial; +// case metric: +// return ScaleUnits.Metric; +// default: +// throw new IllegalStateException("Somehow we have an unallowed unit system"); +// } +// } +// +// static class MultiPolygon extends Polygon { +// +// private List children = new ArrayList(); +// private boolean draggable; +// private OnClickListener clickListener; +// private OnDragListener dragListener; +// +// @Override +// public void showInfoWindow() { +// if (children.size() > 0) { +// children.get(0).showInfoWindow(); +// } +// } +// +// @Override +// public void draw(Canvas canvas, MapView mapView, boolean b) { +// for (Polygon child : children) { +// child.draw(canvas, mapView, b); +// } +// } +// +// public List> getMultiPoints() { +// List> result = new ArrayList<>(); +// for (Polygon p : children) { +// result.add(p.getPoints()); +// } +// return result; +// } +// +// public void setMultiPoints(List> points) { +// Iterator polygonIterator = children.iterator(); +// Iterator> pointIterator = points.iterator(); +// while (polygonIterator.hasNext() && pointIterator.hasNext()) { +// polygonIterator.next().setPoints(pointIterator.next()); +// } +// while (polygonIterator.hasNext()) { +// polygonIterator.next(); +// polygonIterator.remove(); +// } +// while (pointIterator.hasNext()) { +// Polygon p = new Polygon(); +// p.setPoints(pointIterator.next()); +// p.setStrokeColor(getStrokeColor()); +// p.setFillColor(getFillColor()); +// p.setStrokeWidth(getStrokeWidth()); +// p.setInfoWindow(getInfoWindow()); +// p.setDraggable(draggable); +// p.setOnClickListener(clickListener); +// p.setOnDragListener(dragListener); +// children.add(p); +// } +// } +// +// @SuppressWarnings("unchecked") // upcasting nested ArrayList to List +// public List>> getMultiHoles() { +// List>> result = new ArrayList<>(); +// for (Polygon p : children) { +// result.add((List) p.getHoles()); +// } +// return result; +// } +// +// public void setMultiHoles(List>> holes) { +// if (holes == null || holes.isEmpty()) { +// for (Polygon child : children) { +// child.setHoles(Collections.>emptyList()); +// } +// } else if (holes.size() != children.size()) { +// throw new IllegalArgumentException("Holes and points are not of the same arity."); +// } else { +// Iterator polygonIterator = children.iterator(); +// Iterator>> holeIterator = holes.iterator(); +// while (polygonIterator.hasNext() && holeIterator.hasNext()) { +// polygonIterator.next().setHoles(holeIterator.next()); +// } +// } +// } +// +// @Override +// public void setDraggable(boolean draggable) { +// super.setDraggable(draggable); +// this.draggable = draggable; +// for (Polygon child : children) { +// child.setDraggable(draggable); +// } +// } +// +// @Override +// public void setOnClickListener(OnClickListener listener) { +// super.setOnClickListener(listener); +// clickListener = listener; +// for (Polygon child : children) { +// child.setOnClickListener(listener); +// } +// } +// +// @Override +// public void setOnDragListener(OnDragListener listener) { +// super.setOnDragListener(listener); +// dragListener = listener; +// for (Polygon child : children) { +// child.setOnDragListener(listener); +// } +// } +// +// @Override +// public void setStrokeWidth(float strokeWidth) { +// super.setStrokeWidth(strokeWidth); +// for (Polygon child : children) { +// child.setStrokeWidth(strokeWidth); +// } +// } +// +// @Override +// public void setStrokeColor(int strokeColor) { +// super.setStrokeColor(strokeColor); +// for (Polygon child : children) { +// child.setStrokeColor(strokeColor); +// } +// } +// +// @Override +// public void setFillColor(int fillColor) { +// super.setFillColor(fillColor); +// for (Polygon child : children) { +// child.setFillColor(fillColor); +// } +// } +// +// @Override +// public void setTitle(String title) { +// super.setTitle(title); +// for (Polygon child : children) { +// child.setTitle(title); +// } +// } +// +// @Override +// public void setSnippet(String snippet) { +// super.setSnippet(snippet); +// for (Polygon child : children) { +// child.setSnippet(snippet); +// } +// } +// +// @Override +// public boolean onSingleTapConfirmed(MotionEvent event, MapView mapView) { +// for (Polygon child : children) { +// if (child.onSingleTapConfirmed(event, mapView)) { +// return true; +// } +// } +// return false; +// } +// +// @Override +// public boolean contains(MotionEvent event) { +// for (Polygon child : children) { +// if (child.contains(event)) { +// return true; +// } +// } +// return false; +// } +// +// @Override +// public boolean onLongPress(MotionEvent event, MapView mapView) { +// boolean touched = contains(event); +// if (touched){ +// if (mDraggable){ +// mIsDragged = true; +// closeInfoWindow(); +// mDragStartPoint = event; +// if (mOnDragListener != null) { +// mOnDragListener.onDragStart( this ); +// } +// moveToEventPosition(event, mDragStartPoint, mapView); +// } else if (mOnClickListener != null) { +// mOnClickListener.onLongClick( this, mapView, +// (GeoPoint) mapView.getProjection().fromPixels( (int) event.getX(), +// (int) event.getY() ) ); +// } +// } +// return touched; +// } +// +// @Override +// public void moveToEventPosition(final MotionEvent event, final MotionEvent start, +// final MapView view) { +// for (Polygon child : children) { +// child.moveToEventPosition(event, start, view); +// } +// } +// +// @Override +// public void finishMove(final MotionEvent start, final MotionEvent end, final MapView view) { +// for (Polygon child : children) { +// child.finishMove(start, end, view); +// } +// } +// +// @Override +// public boolean onTouchEvent(MotionEvent event, MapView mapView) { +// if (mDraggable && mIsDragged){ +// if (event.getAction() == MotionEvent.ACTION_UP) { +// mIsDragged = false; +// finishMove(mDragStartPoint, event, mapView); +// if (mOnDragListener != null) { +// mOnDragListener.onDragEnd( this ); +// } +// return true; +// } else if (event.getAction() == MotionEvent.ACTION_MOVE) { +// moveToEventPosition( event, mDragStartPoint, mapView ); +// if (mOnDragListener != null) { +// mOnDragListener.onDrag( this ); +// } +// return true; +// } +// } +// return false; +// } +// } +//} diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/NougatUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/NougatUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/NougatUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/NougatUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/OAuth2Helper.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/OAuth2Helper.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/OAuth2Helper.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/OAuth2Helper.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/OnInitializeListener.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/OnInitializeListener.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/OnInitializeListener.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/OnInitializeListener.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/OrientationSensorUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/OrientationSensorUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/OrientationSensorUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/OrientationSensorUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/PaintUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/PaintUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/PaintUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/PaintUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/PhoneCallUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/PhoneCallUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/PhoneCallUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/PhoneCallUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/PlayerListDelta.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/PlayerListDelta.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/PlayerListDelta.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/PlayerListDelta.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/PropertyUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/PropertyUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/PropertyUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/PropertyUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/QUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/QUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/QUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/QUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/RUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/RUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/RUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/RUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/RetValManager.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/RetValManager.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/RetValManager.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/RetValManager.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/RuntimeErrorAlert.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/RuntimeErrorAlert.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/RuntimeErrorAlert.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/RuntimeErrorAlert.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ScopedFile.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ScopedFile.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ScopedFile.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ScopedFile.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ScreenDensityUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ScreenDensityUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ScreenDensityUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ScreenDensityUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/SdkLevel.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/SdkLevel.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/SdkLevel.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/SdkLevel.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/SingleFileOperation.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/SingleFileOperation.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/SingleFileOperation.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/SingleFileOperation.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/SmsBroadcastReceiver.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/SmsBroadcastReceiver.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/SmsBroadcastReceiver.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/SmsBroadcastReceiver.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/Synchronizer.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Synchronizer.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/Synchronizer.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/Synchronizer.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/TelnetRepl.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/TelnetRepl.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/TelnetRepl.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/TelnetRepl.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/TextViewUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/TextViewUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/TextViewUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/TextViewUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/TimerInternal.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/TimerInternal.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/TimerInternal.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/TimerInternal.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/TypeUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/TypeUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/TypeUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/TypeUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/ViewUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ViewUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/ViewUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/ViewUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/WebRTCNativeMgr.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/WebRTCNativeMgr.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/WebRTCNativeMgr.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/WebRTCNativeMgr.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/WebServiceUtil.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/WebServiceUtil.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/WebServiceUtil.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/WebServiceUtil.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/XmlParser.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/XmlParser.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/XmlParser.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/XmlParser.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/YailConstants.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/YailConstants.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/YailConstants.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/YailConstants.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/YailDictionary.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/YailDictionary.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/YailDictionary.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/YailDictionary.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/YailList.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/YailList.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/YailList.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/YailList.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/YailNumberToString.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/YailNumberToString.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/YailNumberToString.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/YailNumberToString.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/YailObject.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/YailObject.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/YailObject.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/YailObject.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/package-info.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/package-info.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/package-info.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/package-info.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/theme/ClassicThemeHelper.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/theme/ClassicThemeHelper.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/theme/ClassicThemeHelper.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/theme/ClassicThemeHelper.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/theme/HoneycombThemeHelper.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/theme/HoneycombThemeHelper.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/theme/HoneycombThemeHelper.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/theme/HoneycombThemeHelper.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/theme/IceCreamSandwichThemeHelper.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/theme/IceCreamSandwichThemeHelper.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/theme/IceCreamSandwichThemeHelper.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/theme/IceCreamSandwichThemeHelper.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/util/theme/ThemeHelper.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/theme/ThemeHelper.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/util/theme/ThemeHelper.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/util/theme/ThemeHelper.java diff --git a/appinventor/components/src/com/google/appinventor/components/runtime/view/ZoomControlView.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/view/ZoomControlView.java similarity index 100% rename from appinventor/components/src/com/google/appinventor/components/runtime/view/ZoomControlView.java rename to appinventor/components/src/main/java/com/google/appinventor/components/runtime/view/ZoomControlView.java diff --git a/appinventor/components/tests/AndroidManifest.xml b/appinventor/components/src/test/AndroidManifest.xml similarity index 100% rename from appinventor/components/tests/AndroidManifest.xml rename to appinventor/components/src/test/AndroidManifest.xml diff --git a/appinventor/components/tests/assets/com.google.appinventor.components.runtime.test/test.txt b/appinventor/components/src/test/assets/com.google.appinventor.components.runtime.test/test.txt similarity index 100% rename from appinventor/components/tests/assets/com.google.appinventor.components.runtime.test/test.txt rename to appinventor/components/src/test/assets/com.google.appinventor.components.runtime.test/test.txt diff --git a/appinventor/components/tests/assets/com.google.appinventor.components.runtime.test/usa-new-england.geojson b/appinventor/components/src/test/assets/com.google.appinventor.components.runtime.test/usa-new-england.geojson similarity index 100% rename from appinventor/components/tests/assets/com.google.appinventor.components.runtime.test/usa-new-england.geojson rename to appinventor/components/src/test/assets/com.google.appinventor.components.runtime.test/usa-new-england.geojson diff --git a/appinventor/components/tests/assets/marker.svg b/appinventor/components/src/test/assets/marker.svg similarity index 100% rename from appinventor/components/tests/assets/marker.svg rename to appinventor/components/src/test/assets/marker.svg diff --git a/appinventor/components/tests/assets/test.txt b/appinventor/components/src/test/assets/test.txt similarity index 100% rename from appinventor/components/tests/assets/test.txt rename to appinventor/components/src/test/assets/test.txt diff --git a/appinventor/components/tests/assets/testCsv.csv b/appinventor/components/src/test/assets/testCsv.csv similarity index 100% rename from appinventor/components/tests/assets/testCsv.csv rename to appinventor/components/src/test/assets/testCsv.csv diff --git a/appinventor/components/tests/assets/testCsv2Rows.csv b/appinventor/components/src/test/assets/testCsv2Rows.csv similarity index 100% rename from appinventor/components/tests/assets/testCsv2Rows.csv rename to appinventor/components/src/test/assets/testCsv2Rows.csv diff --git a/appinventor/components/tests/assets/testJson.json b/appinventor/components/src/test/assets/testJson.json similarity index 100% rename from appinventor/components/tests/assets/testJson.json rename to appinventor/components/src/test/assets/testJson.json diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/AbstractAxisChartTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/AbstractAxisChartTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/AbstractAxisChartTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/AbstractAxisChartTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/AbstractChartDataModel2DTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/AbstractChartDataModel2DTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/AbstractChartDataModel2DTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/AbstractChartDataModel2DTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/AbstractChartDataModelBaseTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/AbstractChartDataModelBaseTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/AbstractChartDataModelBaseTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/AbstractChartDataModelBaseTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/AbstractChartTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/AbstractChartTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/AbstractChartTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/AbstractChartTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/AbstractPointChartDataModelTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/AbstractPointChartDataModelTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/AbstractPointChartDataModelTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/AbstractPointChartDataModelTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/AreaChartDataModelTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/AreaChartDataModelTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/AreaChartDataModelTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/AreaChartDataModelTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/AreaChartTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/AreaChartTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/AreaChartTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/AreaChartTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/BarChartDataModelTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/BarChartDataModelTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/BarChartDataModelTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/BarChartDataModelTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/BarChartTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/BarChartTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/BarChartTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/BarChartTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/BluetoothConnectionBaseTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/BluetoothConnectionBaseTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/BluetoothConnectionBaseTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/BluetoothConnectionBaseTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/ChartData2DTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/ChartData2DTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/ChartData2DTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/ChartData2DTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/CheckboxTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/CheckboxTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/CheckboxTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/CheckboxTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/CircleTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/CircleTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/CircleTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/CircleTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/ClockTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/ClockTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/ClockTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/ClockTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/DataFileTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/DataFileTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/DataFileTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/DataFileTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/FeatureCollectionTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/FeatureCollectionTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/FeatureCollectionTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/FeatureCollectionTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/FileTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/FileTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/FileTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/FileTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/FileTestBase.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/FileTestBase.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/FileTestBase.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/FileTestBase.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/FormTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/FormTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/FormTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/FormTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/LabelTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/LabelTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/LabelTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/LabelTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/LegoMindstormsNxtBaseTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/LegoMindstormsNxtBaseTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/LegoMindstormsNxtBaseTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/LegoMindstormsNxtBaseTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/LineChartDataModelTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/LineChartDataModelTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/LineChartDataModelTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/LineChartDataModelTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/LineChartTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/LineChartTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/LineChartTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/LineChartTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/LineStringTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/LineStringTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/LineStringTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/LineStringTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/ListViewTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/ListViewTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/ListViewTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/ListViewTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/MapDistanceTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/MapDistanceTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/MapDistanceTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/MapDistanceTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/MapTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/MapTest.java similarity index 99% rename from appinventor/components/tests/com/google/appinventor/components/runtime/MapTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/MapTest.java index 047d5d1cba5..76c58f7e557 100644 --- a/appinventor/components/tests/com/google/appinventor/components/runtime/MapTest.java +++ b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/MapTest.java @@ -29,7 +29,6 @@ import java.io.File; import java.io.IOException; import java.net.MalformedURLException; -import java.net.URL; import java.util.Collections; import static com.google.appinventor.components.runtime.shadows.ShadowEventDispatcher.assertErrorOccurred; diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/MapTestBase.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/MapTestBase.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/MapTestBase.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/MapTestBase.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/MarkerTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/MarkerTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/MarkerTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/MarkerTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/OrientationSensorTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/OrientationSensorTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/OrientationSensorTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/OrientationSensorTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/PieChartDataModelTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/PieChartDataModelTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/PieChartDataModelTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/PieChartDataModelTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/PieChartTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/PieChartTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/PieChartTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/PieChartTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/PolygonTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/PolygonTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/PolygonTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/PolygonTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/RectangleTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/RectangleTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/RectangleTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/RectangleTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/ReplFormTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/ReplFormTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/ReplFormTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/ReplFormTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/RobolectricTestBase.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/RobolectricTestBase.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/RobolectricTestBase.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/RobolectricTestBase.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/ScatterChartDataModelTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/ScatterChartDataModelTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/ScatterChartDataModelTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/ScatterChartDataModelTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/ScatterChartTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/ScatterChartTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/ScatterChartTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/ScatterChartTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/SpriteTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/SpriteTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/SpriteTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/SpriteTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/SwitchTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/SwitchTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/SwitchTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/SwitchTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/TableArrangementTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/TableArrangementTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/TableArrangementTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/TableArrangementTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/TextBoxTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/TextBoxTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/TextBoxTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/TextBoxTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/TextingTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/TextingTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/TextingTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/TextingTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/ToggleTestBase.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/ToggleTestBase.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/ToggleTestBase.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/ToggleTestBase.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/WebTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/WebTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/WebTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/WebTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/WebViewerTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/WebViewerTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/WebViewerTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/WebViewerTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/repltest/FileReplTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/repltest/FileReplTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/repltest/FileReplTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/repltest/FileReplTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/shadows/ShadowActivityCompat.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/ShadowActivityCompat.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/shadows/ShadowActivityCompat.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/ShadowActivityCompat.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/shadows/ShadowAsynchUtil.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/ShadowAsynchUtil.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/shadows/ShadowAsynchUtil.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/ShadowAsynchUtil.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/shadows/ShadowEventDispatcher.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/ShadowEventDispatcher.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/shadows/ShadowEventDispatcher.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/ShadowEventDispatcher.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/shadows/org/osmdroid/tileprovider/modules/ShadowMapTileModuleProviderBase.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/org/osmdroid/tileprovider/modules/ShadowMapTileModuleProviderBase.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/shadows/org/osmdroid/tileprovider/modules/ShadowMapTileModuleProviderBase.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/org/osmdroid/tileprovider/modules/ShadowMapTileModuleProviderBase.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/shadows/org/osmdroid/tileprovider/util/ShadowStorageUtils.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/org/osmdroid/tileprovider/util/ShadowStorageUtils.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/shadows/org/osmdroid/tileprovider/util/ShadowStorageUtils.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/org/osmdroid/tileprovider/util/ShadowStorageUtils.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/shadows/org/osmdroid/views/ShadowMapView.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/org/osmdroid/views/ShadowMapView.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/shadows/org/osmdroid/views/ShadowMapView.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/shadows/org/osmdroid/views/ShadowMapView.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/test/TestExtension.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/test/TestExtension.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/test/TestExtension.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/test/TestExtension.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/BoundingBoxTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/BoundingBoxTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/BoundingBoxTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/BoundingBoxTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/CsvUtilTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/CsvUtilTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/CsvUtilTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/CsvUtilTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/DataSourceUtilTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/DataSourceUtilTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/DataSourceUtilTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/DataSourceUtilTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/DatesTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/DatesTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/DatesTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/DatesTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/DummyMapControllerTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/DummyMapControllerTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/DummyMapControllerTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/DummyMapControllerTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/FileUtilTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/FileUtilTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/FileUtilTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/FileUtilTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/GameInstanceTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/GameInstanceTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/GameInstanceTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/GameInstanceTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/GeoJSONUtilTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/GeoJSONUtilTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/GeoJSONUtilTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/GeoJSONUtilTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/GeometryUtilTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/GeometryUtilTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/GeometryUtilTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/GeometryUtilTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/JavaStringUtilsTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/JavaStringUtilsTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/JavaStringUtilsTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/JavaStringUtilsTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/JsonUtilTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/JsonUtilTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/JsonUtilTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/JsonUtilTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/MediaUtilTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/MediaUtilTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/MediaUtilTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/MediaUtilTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/OrientationSensorUtilTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/OrientationSensorUtilTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/OrientationSensorUtilTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/OrientationSensorUtilTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/PaintUtilTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/PaintUtilTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/PaintUtilTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/PaintUtilTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/PropertyUtilTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/PropertyUtilTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/PropertyUtilTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/PropertyUtilTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/YailDictionaryTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/YailDictionaryTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/YailDictionaryTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/YailDictionaryTest.java diff --git a/appinventor/components/tests/com/google/appinventor/components/runtime/util/YailListTest.java b/appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/YailListTest.java similarity index 100% rename from appinventor/components/tests/com/google/appinventor/components/runtime/util/YailListTest.java rename to appinventor/components/src/test/java/com/google/appinventor/components/runtime/util/YailListTest.java diff --git a/appinventor/components/tests/org/robolectric/annotation/Config.java b/appinventor/components/src/test/java/org/robolectric/annotation/Config.java similarity index 100% rename from appinventor/components/tests/org/robolectric/annotation/Config.java rename to appinventor/components/src/test/java/org/robolectric/annotation/Config.java diff --git a/appinventor/components/tests/res/color/abc_background_cache_hint_selector_material_dark.xml b/appinventor/components/src/test/res/color/abc_background_cache_hint_selector_material_dark.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_background_cache_hint_selector_material_dark.xml rename to appinventor/components/src/test/res/color/abc_background_cache_hint_selector_material_dark.xml diff --git a/appinventor/components/tests/res/color/abc_background_cache_hint_selector_material_light.xml b/appinventor/components/src/test/res/color/abc_background_cache_hint_selector_material_light.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_background_cache_hint_selector_material_light.xml rename to appinventor/components/src/test/res/color/abc_background_cache_hint_selector_material_light.xml diff --git a/appinventor/components/tests/res/color/abc_btn_colored_borderless_text_material.xml b/appinventor/components/src/test/res/color/abc_btn_colored_borderless_text_material.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_btn_colored_borderless_text_material.xml rename to appinventor/components/src/test/res/color/abc_btn_colored_borderless_text_material.xml diff --git a/appinventor/components/tests/res/color/abc_btn_colored_text_material.xml b/appinventor/components/src/test/res/color/abc_btn_colored_text_material.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_btn_colored_text_material.xml rename to appinventor/components/src/test/res/color/abc_btn_colored_text_material.xml diff --git a/appinventor/components/tests/res/color/abc_hint_foreground_material_dark.xml b/appinventor/components/src/test/res/color/abc_hint_foreground_material_dark.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_hint_foreground_material_dark.xml rename to appinventor/components/src/test/res/color/abc_hint_foreground_material_dark.xml diff --git a/appinventor/components/tests/res/color/abc_hint_foreground_material_light.xml b/appinventor/components/src/test/res/color/abc_hint_foreground_material_light.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_hint_foreground_material_light.xml rename to appinventor/components/src/test/res/color/abc_hint_foreground_material_light.xml diff --git a/appinventor/components/tests/res/color/abc_primary_text_disable_only_material_dark.xml b/appinventor/components/src/test/res/color/abc_primary_text_disable_only_material_dark.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_primary_text_disable_only_material_dark.xml rename to appinventor/components/src/test/res/color/abc_primary_text_disable_only_material_dark.xml diff --git a/appinventor/components/tests/res/color/abc_primary_text_disable_only_material_light.xml b/appinventor/components/src/test/res/color/abc_primary_text_disable_only_material_light.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_primary_text_disable_only_material_light.xml rename to appinventor/components/src/test/res/color/abc_primary_text_disable_only_material_light.xml diff --git a/appinventor/components/tests/res/color/abc_primary_text_material_dark.xml b/appinventor/components/src/test/res/color/abc_primary_text_material_dark.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_primary_text_material_dark.xml rename to appinventor/components/src/test/res/color/abc_primary_text_material_dark.xml diff --git a/appinventor/components/tests/res/color/abc_primary_text_material_light.xml b/appinventor/components/src/test/res/color/abc_primary_text_material_light.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_primary_text_material_light.xml rename to appinventor/components/src/test/res/color/abc_primary_text_material_light.xml diff --git a/appinventor/components/tests/res/color/abc_search_url_text.xml b/appinventor/components/src/test/res/color/abc_search_url_text.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_search_url_text.xml rename to appinventor/components/src/test/res/color/abc_search_url_text.xml diff --git a/appinventor/components/tests/res/color/abc_secondary_text_material_dark.xml b/appinventor/components/src/test/res/color/abc_secondary_text_material_dark.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_secondary_text_material_dark.xml rename to appinventor/components/src/test/res/color/abc_secondary_text_material_dark.xml diff --git a/appinventor/components/tests/res/color/abc_secondary_text_material_light.xml b/appinventor/components/src/test/res/color/abc_secondary_text_material_light.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_secondary_text_material_light.xml rename to appinventor/components/src/test/res/color/abc_secondary_text_material_light.xml diff --git a/appinventor/components/tests/res/color/abc_tint_btn_checkable.xml b/appinventor/components/src/test/res/color/abc_tint_btn_checkable.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_tint_btn_checkable.xml rename to appinventor/components/src/test/res/color/abc_tint_btn_checkable.xml diff --git a/appinventor/components/tests/res/color/abc_tint_default.xml b/appinventor/components/src/test/res/color/abc_tint_default.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_tint_default.xml rename to appinventor/components/src/test/res/color/abc_tint_default.xml diff --git a/appinventor/components/tests/res/color/abc_tint_edittext.xml b/appinventor/components/src/test/res/color/abc_tint_edittext.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_tint_edittext.xml rename to appinventor/components/src/test/res/color/abc_tint_edittext.xml diff --git a/appinventor/components/tests/res/color/abc_tint_seek_thumb.xml b/appinventor/components/src/test/res/color/abc_tint_seek_thumb.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_tint_seek_thumb.xml rename to appinventor/components/src/test/res/color/abc_tint_seek_thumb.xml diff --git a/appinventor/components/tests/res/color/abc_tint_spinner.xml b/appinventor/components/src/test/res/color/abc_tint_spinner.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_tint_spinner.xml rename to appinventor/components/src/test/res/color/abc_tint_spinner.xml diff --git a/appinventor/components/tests/res/color/abc_tint_switch_track.xml b/appinventor/components/src/test/res/color/abc_tint_switch_track.xml similarity index 100% rename from appinventor/components/tests/res/color/abc_tint_switch_track.xml rename to appinventor/components/src/test/res/color/abc_tint_switch_track.xml diff --git a/appinventor/components/tests/res/color/switch_thumb_material_dark.xml b/appinventor/components/src/test/res/color/switch_thumb_material_dark.xml similarity index 100% rename from appinventor/components/tests/res/color/switch_thumb_material_dark.xml rename to appinventor/components/src/test/res/color/switch_thumb_material_dark.xml diff --git a/appinventor/components/tests/res/color/switch_thumb_material_light.xml b/appinventor/components/src/test/res/color/switch_thumb_material_light.xml similarity index 100% rename from appinventor/components/tests/res/color/switch_thumb_material_light.xml rename to appinventor/components/src/test/res/color/switch_thumb_material_light.xml diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_black_16dp.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_black_16dp.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_black_16dp.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_black_16dp.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_black_36dp.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_black_36dp.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_black_36dp.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_black_36dp.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_black_48dp.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_black_48dp.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_black_48dp.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_black_48dp.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_list_focused_holo.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_focused_holo.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_list_focused_holo.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_focused_holo.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/ic_launcher_background.png b/appinventor/components/src/test/res/drawable-mdpi-v4/ic_launcher_background.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/ic_launcher_background.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/ic_launcher_background.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/notification_bg_low_normal.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/notification_bg_low_normal.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/notification_bg_low_normal.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/notification_bg_low_normal.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/notification_bg_low_pressed.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/notification_bg_low_pressed.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/notification_bg_low_pressed.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/notification_bg_low_pressed.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/notification_bg_normal.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/notification_bg_normal.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/notification_bg_normal.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/notification_bg_normal.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png b/appinventor/components/src/test/res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png b/appinventor/components/src/test/res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/osm_ic_center_map.png b/appinventor/components/src/test/res/drawable-mdpi-v4/osm_ic_center_map.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/osm_ic_center_map.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/osm_ic_center_map.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/osm_ic_follow_me.png b/appinventor/components/src/test/res/drawable-mdpi-v4/osm_ic_follow_me.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/osm_ic_follow_me.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/osm_ic_follow_me.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/osm_ic_follow_me_on.png b/appinventor/components/src/test/res/drawable-mdpi-v4/osm_ic_follow_me_on.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/osm_ic_follow_me_on.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/osm_ic_follow_me_on.png diff --git a/appinventor/components/tests/res/drawable-mdpi-v4/osm_ic_ic_map_ortho.png b/appinventor/components/src/test/res/drawable-mdpi-v4/osm_ic_ic_map_ortho.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi-v4/osm_ic_ic_map_ortho.png rename to appinventor/components/src/test/res/drawable-mdpi-v4/osm_ic_ic_map_ortho.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ab_share_pack_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ab_share_pack_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ab_share_pack_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ab_share_pack_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_btn_check_to_on_mtrl_000.png b/appinventor/components/src/test/res/drawable-mdpi/abc_btn_check_to_on_mtrl_000.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_btn_check_to_on_mtrl_000.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_btn_check_to_on_mtrl_000.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_btn_check_to_on_mtrl_015.png b/appinventor/components/src/test/res/drawable-mdpi/abc_btn_check_to_on_mtrl_015.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_btn_check_to_on_mtrl_015.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_btn_check_to_on_mtrl_015.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_btn_radio_to_on_mtrl_000.png b/appinventor/components/src/test/res/drawable-mdpi/abc_btn_radio_to_on_mtrl_000.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_btn_radio_to_on_mtrl_000.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_btn_radio_to_on_mtrl_000.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_btn_radio_to_on_mtrl_015.png b/appinventor/components/src/test/res/drawable-mdpi/abc_btn_radio_to_on_mtrl_015.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_btn_radio_to_on_mtrl_015.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_btn_radio_to_on_mtrl_015.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_btn_rating_star_off_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_btn_rating_star_off_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_btn_rating_star_off_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_btn_rating_star_off_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_btn_rating_star_on_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_btn_rating_star_on_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_btn_rating_star_on_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_btn_rating_star_on_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_btn_switch_to_on_mtrl_00001.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_btn_switch_to_on_mtrl_00001.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_btn_switch_to_on_mtrl_00001.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_btn_switch_to_on_mtrl_00001.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_btn_switch_to_on_mtrl_00012.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_btn_switch_to_on_mtrl_00012.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_btn_switch_to_on_mtrl_00012.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_btn_switch_to_on_mtrl_00012.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_cab_background_top_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_cab_background_top_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_cab_background_top_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_cab_background_top_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_ab_back_mtrl_am_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_ab_back_mtrl_am_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_ab_back_mtrl_am_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_ab_back_mtrl_am_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_clear_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_clear_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_clear_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_clear_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_commit_search_api_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_commit_search_api_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_commit_search_api_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_commit_search_api_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_go_search_api_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_go_search_api_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_go_search_api_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_go_search_api_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_copy_mtrl_am_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_copy_mtrl_am_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_copy_mtrl_am_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_copy_mtrl_am_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_cut_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_cut_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_cut_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_cut_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_moreoverflow_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_moreoverflow_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_moreoverflow_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_moreoverflow_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_paste_mtrl_am_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_paste_mtrl_am_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_paste_mtrl_am_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_paste_mtrl_am_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_selectall_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_selectall_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_selectall_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_selectall_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_share_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_share_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_menu_share_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_menu_share_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_search_api_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_search_api_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_search_api_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_search_api_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_ic_voice_search_api_mtrl_alpha.png b/appinventor/components/src/test/res/drawable-mdpi/abc_ic_voice_search_api_mtrl_alpha.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_ic_voice_search_api_mtrl_alpha.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_ic_voice_search_api_mtrl_alpha.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_list_divider_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_list_divider_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_list_divider_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_list_divider_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_list_focused_holo.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_list_focused_holo.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_list_focused_holo.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_list_focused_holo.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_list_longpressed_holo.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_list_longpressed_holo.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_list_longpressed_holo.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_list_longpressed_holo.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_list_pressed_holo_dark.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_list_pressed_holo_dark.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_list_pressed_holo_dark.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_list_pressed_holo_dark.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_list_pressed_holo_light.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_list_pressed_holo_light.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_list_pressed_holo_light.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_list_pressed_holo_light.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_list_selector_disabled_holo_dark.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_list_selector_disabled_holo_dark.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_list_selector_disabled_holo_dark.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_list_selector_disabled_holo_dark.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_list_selector_disabled_holo_light.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_list_selector_disabled_holo_light.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_list_selector_disabled_holo_light.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_list_selector_disabled_holo_light.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_menu_hardkey_panel_mtrl_mult.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_menu_hardkey_panel_mtrl_mult.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_menu_hardkey_panel_mtrl_mult.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_menu_hardkey_panel_mtrl_mult.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_popup_background_mtrl_mult.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_popup_background_mtrl_mult.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_popup_background_mtrl_mult.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_popup_background_mtrl_mult.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_spinner_mtrl_am_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_spinner_mtrl_am_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_spinner_mtrl_am_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_spinner_mtrl_am_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_switch_track_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_switch_track_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_switch_track_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_switch_track_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_tab_indicator_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_tab_indicator_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_tab_indicator_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_tab_indicator_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_text_cursor_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_text_cursor_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_text_cursor_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_text_cursor_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_textfield_activated_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_textfield_activated_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_textfield_activated_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_textfield_activated_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_textfield_default_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_textfield_default_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_textfield_default_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_textfield_default_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_textfield_search_activated_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_textfield_search_activated_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_textfield_search_activated_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_textfield_search_activated_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable-mdpi/abc_textfield_search_default_mtrl_alpha.9.png b/appinventor/components/src/test/res/drawable-mdpi/abc_textfield_search_default_mtrl_alpha.9.png similarity index 100% rename from appinventor/components/tests/res/drawable-mdpi/abc_textfield_search_default_mtrl_alpha.9.png rename to appinventor/components/src/test/res/drawable-mdpi/abc_textfield_search_default_mtrl_alpha.9.png diff --git a/appinventor/components/tests/res/drawable/abc_btn_borderless_material.xml b/appinventor/components/src/test/res/drawable/abc_btn_borderless_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_btn_borderless_material.xml rename to appinventor/components/src/test/res/drawable/abc_btn_borderless_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_btn_check_material.xml b/appinventor/components/src/test/res/drawable/abc_btn_check_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_btn_check_material.xml rename to appinventor/components/src/test/res/drawable/abc_btn_check_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_btn_colored_material.xml b/appinventor/components/src/test/res/drawable/abc_btn_colored_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_btn_colored_material.xml rename to appinventor/components/src/test/res/drawable/abc_btn_colored_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_btn_default_mtrl_shape.xml b/appinventor/components/src/test/res/drawable/abc_btn_default_mtrl_shape.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_btn_default_mtrl_shape.xml rename to appinventor/components/src/test/res/drawable/abc_btn_default_mtrl_shape.xml diff --git a/appinventor/components/tests/res/drawable/abc_btn_radio_material.xml b/appinventor/components/src/test/res/drawable/abc_btn_radio_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_btn_radio_material.xml rename to appinventor/components/src/test/res/drawable/abc_btn_radio_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_cab_background_internal_bg.xml b/appinventor/components/src/test/res/drawable/abc_cab_background_internal_bg.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_cab_background_internal_bg.xml rename to appinventor/components/src/test/res/drawable/abc_cab_background_internal_bg.xml diff --git a/appinventor/components/tests/res/drawable/abc_cab_background_top_material.xml b/appinventor/components/src/test/res/drawable/abc_cab_background_top_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_cab_background_top_material.xml rename to appinventor/components/src/test/res/drawable/abc_cab_background_top_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_dialog_material_background.xml b/appinventor/components/src/test/res/drawable/abc_dialog_material_background.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_dialog_material_background.xml rename to appinventor/components/src/test/res/drawable/abc_dialog_material_background.xml diff --git a/appinventor/components/tests/res/drawable/abc_dialog_material_background_dark.xml b/appinventor/components/src/test/res/drawable/abc_dialog_material_background_dark.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_dialog_material_background_dark.xml rename to appinventor/components/src/test/res/drawable/abc_dialog_material_background_dark.xml diff --git a/appinventor/components/tests/res/drawable/abc_dialog_material_background_light.xml b/appinventor/components/src/test/res/drawable/abc_dialog_material_background_light.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_dialog_material_background_light.xml rename to appinventor/components/src/test/res/drawable/abc_dialog_material_background_light.xml diff --git a/appinventor/components/tests/res/drawable/abc_edit_text_material.xml b/appinventor/components/src/test/res/drawable/abc_edit_text_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_edit_text_material.xml rename to appinventor/components/src/test/res/drawable/abc_edit_text_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_ic_ab_back_material.xml b/appinventor/components/src/test/res/drawable/abc_ic_ab_back_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ic_ab_back_material.xml rename to appinventor/components/src/test/res/drawable/abc_ic_ab_back_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_ic_arrow_drop_right_black_24dp.xml b/appinventor/components/src/test/res/drawable/abc_ic_arrow_drop_right_black_24dp.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ic_arrow_drop_right_black_24dp.xml rename to appinventor/components/src/test/res/drawable/abc_ic_arrow_drop_right_black_24dp.xml diff --git a/appinventor/components/tests/res/drawable/abc_ic_clear_material.xml b/appinventor/components/src/test/res/drawable/abc_ic_clear_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ic_clear_material.xml rename to appinventor/components/src/test/res/drawable/abc_ic_clear_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_ic_go_search_api_material.xml b/appinventor/components/src/test/res/drawable/abc_ic_go_search_api_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ic_go_search_api_material.xml rename to appinventor/components/src/test/res/drawable/abc_ic_go_search_api_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_ic_menu_overflow_material.xml b/appinventor/components/src/test/res/drawable/abc_ic_menu_overflow_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ic_menu_overflow_material.xml rename to appinventor/components/src/test/res/drawable/abc_ic_menu_overflow_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_ic_search_api_material.xml b/appinventor/components/src/test/res/drawable/abc_ic_search_api_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ic_search_api_material.xml rename to appinventor/components/src/test/res/drawable/abc_ic_search_api_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_ic_voice_search_api_material.xml b/appinventor/components/src/test/res/drawable/abc_ic_voice_search_api_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ic_voice_search_api_material.xml rename to appinventor/components/src/test/res/drawable/abc_ic_voice_search_api_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_item_background_holo_dark.xml b/appinventor/components/src/test/res/drawable/abc_item_background_holo_dark.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_item_background_holo_dark.xml rename to appinventor/components/src/test/res/drawable/abc_item_background_holo_dark.xml diff --git a/appinventor/components/tests/res/drawable/abc_item_background_holo_light.xml b/appinventor/components/src/test/res/drawable/abc_item_background_holo_light.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_item_background_holo_light.xml rename to appinventor/components/src/test/res/drawable/abc_item_background_holo_light.xml diff --git a/appinventor/components/tests/res/drawable/abc_list_selector_background_transition_holo_dark.xml b/appinventor/components/src/test/res/drawable/abc_list_selector_background_transition_holo_dark.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_list_selector_background_transition_holo_dark.xml rename to appinventor/components/src/test/res/drawable/abc_list_selector_background_transition_holo_dark.xml diff --git a/appinventor/components/tests/res/drawable/abc_list_selector_background_transition_holo_light.xml b/appinventor/components/src/test/res/drawable/abc_list_selector_background_transition_holo_light.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_list_selector_background_transition_holo_light.xml rename to appinventor/components/src/test/res/drawable/abc_list_selector_background_transition_holo_light.xml diff --git a/appinventor/components/tests/res/drawable/abc_list_selector_holo_dark.xml b/appinventor/components/src/test/res/drawable/abc_list_selector_holo_dark.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_list_selector_holo_dark.xml rename to appinventor/components/src/test/res/drawable/abc_list_selector_holo_dark.xml diff --git a/appinventor/components/tests/res/drawable/abc_list_selector_holo_light.xml b/appinventor/components/src/test/res/drawable/abc_list_selector_holo_light.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_list_selector_holo_light.xml rename to appinventor/components/src/test/res/drawable/abc_list_selector_holo_light.xml diff --git a/appinventor/components/tests/res/drawable/abc_ratingbar_full_material.xml b/appinventor/components/src/test/res/drawable/abc_ratingbar_full_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ratingbar_full_material.xml rename to appinventor/components/src/test/res/drawable/abc_ratingbar_full_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_ratingbar_indicator_material.xml b/appinventor/components/src/test/res/drawable/abc_ratingbar_indicator_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ratingbar_indicator_material.xml rename to appinventor/components/src/test/res/drawable/abc_ratingbar_indicator_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_ratingbar_material.xml b/appinventor/components/src/test/res/drawable/abc_ratingbar_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ratingbar_material.xml rename to appinventor/components/src/test/res/drawable/abc_ratingbar_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_ratingbar_small_material.xml b/appinventor/components/src/test/res/drawable/abc_ratingbar_small_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_ratingbar_small_material.xml rename to appinventor/components/src/test/res/drawable/abc_ratingbar_small_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_seekbar_thumb_material.xml b/appinventor/components/src/test/res/drawable/abc_seekbar_thumb_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_seekbar_thumb_material.xml rename to appinventor/components/src/test/res/drawable/abc_seekbar_thumb_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_seekbar_tick_mark_material.xml b/appinventor/components/src/test/res/drawable/abc_seekbar_tick_mark_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_seekbar_tick_mark_material.xml rename to appinventor/components/src/test/res/drawable/abc_seekbar_tick_mark_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_seekbar_track_material.xml b/appinventor/components/src/test/res/drawable/abc_seekbar_track_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_seekbar_track_material.xml rename to appinventor/components/src/test/res/drawable/abc_seekbar_track_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_spinner_textfield_background_material.xml b/appinventor/components/src/test/res/drawable/abc_spinner_textfield_background_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_spinner_textfield_background_material.xml rename to appinventor/components/src/test/res/drawable/abc_spinner_textfield_background_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_switch_thumb_material.xml b/appinventor/components/src/test/res/drawable/abc_switch_thumb_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_switch_thumb_material.xml rename to appinventor/components/src/test/res/drawable/abc_switch_thumb_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_tab_indicator_material.xml b/appinventor/components/src/test/res/drawable/abc_tab_indicator_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_tab_indicator_material.xml rename to appinventor/components/src/test/res/drawable/abc_tab_indicator_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_text_cursor_material.xml b/appinventor/components/src/test/res/drawable/abc_text_cursor_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_text_cursor_material.xml rename to appinventor/components/src/test/res/drawable/abc_text_cursor_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_textfield_search_material.xml b/appinventor/components/src/test/res/drawable/abc_textfield_search_material.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_textfield_search_material.xml rename to appinventor/components/src/test/res/drawable/abc_textfield_search_material.xml diff --git a/appinventor/components/tests/res/drawable/abc_vector_test.xml b/appinventor/components/src/test/res/drawable/abc_vector_test.xml similarity index 100% rename from appinventor/components/tests/res/drawable/abc_vector_test.xml rename to appinventor/components/src/test/res/drawable/abc_vector_test.xml diff --git a/appinventor/components/tests/res/drawable/bonuspack_bubble.9.png b/appinventor/components/src/test/res/drawable/bonuspack_bubble.9.png similarity index 100% rename from appinventor/components/tests/res/drawable/bonuspack_bubble.9.png rename to appinventor/components/src/test/res/drawable/bonuspack_bubble.9.png diff --git a/appinventor/components/tests/res/drawable/btn_moreinfo.xml b/appinventor/components/src/test/res/drawable/btn_moreinfo.xml similarity index 100% rename from appinventor/components/tests/res/drawable/btn_moreinfo.xml rename to appinventor/components/src/test/res/drawable/btn_moreinfo.xml diff --git a/appinventor/components/tests/res/drawable/center.png b/appinventor/components/src/test/res/drawable/center.png similarity index 100% rename from appinventor/components/tests/res/drawable/center.png rename to appinventor/components/src/test/res/drawable/center.png diff --git a/appinventor/components/tests/res/drawable/direction_arrow.png b/appinventor/components/src/test/res/drawable/direction_arrow.png similarity index 100% rename from appinventor/components/tests/res/drawable/direction_arrow.png rename to appinventor/components/src/test/res/drawable/direction_arrow.png diff --git a/appinventor/components/tests/res/drawable/ic_menu_compass.png b/appinventor/components/src/test/res/drawable/ic_menu_compass.png similarity index 100% rename from appinventor/components/tests/res/drawable/ic_menu_compass.png rename to appinventor/components/src/test/res/drawable/ic_menu_compass.png diff --git a/appinventor/components/tests/res/drawable/ic_menu_mapmode.png b/appinventor/components/src/test/res/drawable/ic_menu_mapmode.png similarity index 100% rename from appinventor/components/tests/res/drawable/ic_menu_mapmode.png rename to appinventor/components/src/test/res/drawable/ic_menu_mapmode.png diff --git a/appinventor/components/tests/res/drawable/ic_menu_mylocation.png b/appinventor/components/src/test/res/drawable/ic_menu_mylocation.png similarity index 100% rename from appinventor/components/tests/res/drawable/ic_menu_mylocation.png rename to appinventor/components/src/test/res/drawable/ic_menu_mylocation.png diff --git a/appinventor/components/tests/res/drawable/ic_menu_offline.png b/appinventor/components/src/test/res/drawable/ic_menu_offline.png similarity index 100% rename from appinventor/components/tests/res/drawable/ic_menu_offline.png rename to appinventor/components/src/test/res/drawable/ic_menu_offline.png diff --git a/appinventor/components/tests/res/drawable/marker_default.png b/appinventor/components/src/test/res/drawable/marker_default.png similarity index 100% rename from appinventor/components/tests/res/drawable/marker_default.png rename to appinventor/components/src/test/res/drawable/marker_default.png diff --git a/appinventor/components/tests/res/drawable/marker_default_focused_base.png b/appinventor/components/src/test/res/drawable/marker_default_focused_base.png similarity index 100% rename from appinventor/components/tests/res/drawable/marker_default_focused_base.png rename to appinventor/components/src/test/res/drawable/marker_default_focused_base.png diff --git a/appinventor/components/tests/res/drawable/moreinfo_arrow.png b/appinventor/components/src/test/res/drawable/moreinfo_arrow.png similarity index 100% rename from appinventor/components/tests/res/drawable/moreinfo_arrow.png rename to appinventor/components/src/test/res/drawable/moreinfo_arrow.png diff --git a/appinventor/components/tests/res/drawable/moreinfo_arrow_pressed.png b/appinventor/components/src/test/res/drawable/moreinfo_arrow_pressed.png similarity index 100% rename from appinventor/components/tests/res/drawable/moreinfo_arrow_pressed.png rename to appinventor/components/src/test/res/drawable/moreinfo_arrow_pressed.png diff --git a/appinventor/components/tests/res/drawable/navto_small.png b/appinventor/components/src/test/res/drawable/navto_small.png similarity index 100% rename from appinventor/components/tests/res/drawable/navto_small.png rename to appinventor/components/src/test/res/drawable/navto_small.png diff --git a/appinventor/components/tests/res/drawable/next.png b/appinventor/components/src/test/res/drawable/next.png similarity index 100% rename from appinventor/components/tests/res/drawable/next.png rename to appinventor/components/src/test/res/drawable/next.png diff --git a/appinventor/components/tests/res/drawable/person.png b/appinventor/components/src/test/res/drawable/person.png similarity index 100% rename from appinventor/components/tests/res/drawable/person.png rename to appinventor/components/src/test/res/drawable/person.png diff --git a/appinventor/components/tests/res/drawable/previous.png b/appinventor/components/src/test/res/drawable/previous.png similarity index 100% rename from appinventor/components/tests/res/drawable/previous.png rename to appinventor/components/src/test/res/drawable/previous.png diff --git a/appinventor/components/tests/res/drawable/tooltip_frame_dark.xml b/appinventor/components/src/test/res/drawable/tooltip_frame_dark.xml similarity index 100% rename from appinventor/components/tests/res/drawable/tooltip_frame_dark.xml rename to appinventor/components/src/test/res/drawable/tooltip_frame_dark.xml diff --git a/appinventor/components/tests/res/drawable/tooltip_frame_light.xml b/appinventor/components/src/test/res/drawable/tooltip_frame_light.xml similarity index 100% rename from appinventor/components/tests/res/drawable/tooltip_frame_light.xml rename to appinventor/components/src/test/res/drawable/tooltip_frame_light.xml diff --git a/appinventor/components/tests/res/drawable/zoom_in.png b/appinventor/components/src/test/res/drawable/zoom_in.png similarity index 100% rename from appinventor/components/tests/res/drawable/zoom_in.png rename to appinventor/components/src/test/res/drawable/zoom_in.png diff --git a/appinventor/components/tests/res/drawable/zoom_out.png b/appinventor/components/src/test/res/drawable/zoom_out.png similarity index 100% rename from appinventor/components/tests/res/drawable/zoom_out.png rename to appinventor/components/src/test/res/drawable/zoom_out.png diff --git a/appinventor/components/tests/res/layout/abc_action_bar_title_item.xml b/appinventor/components/src/test/res/layout/abc_action_bar_title_item.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_action_bar_title_item.xml rename to appinventor/components/src/test/res/layout/abc_action_bar_title_item.xml diff --git a/appinventor/components/tests/res/layout/abc_action_bar_up_container.xml b/appinventor/components/src/test/res/layout/abc_action_bar_up_container.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_action_bar_up_container.xml rename to appinventor/components/src/test/res/layout/abc_action_bar_up_container.xml diff --git a/appinventor/components/tests/res/layout/abc_action_bar_view_list_nav_layout.xml b/appinventor/components/src/test/res/layout/abc_action_bar_view_list_nav_layout.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_action_bar_view_list_nav_layout.xml rename to appinventor/components/src/test/res/layout/abc_action_bar_view_list_nav_layout.xml diff --git a/appinventor/components/tests/res/layout/abc_action_menu_item_layout.xml b/appinventor/components/src/test/res/layout/abc_action_menu_item_layout.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_action_menu_item_layout.xml rename to appinventor/components/src/test/res/layout/abc_action_menu_item_layout.xml diff --git a/appinventor/components/tests/res/layout/abc_action_menu_layout.xml b/appinventor/components/src/test/res/layout/abc_action_menu_layout.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_action_menu_layout.xml rename to appinventor/components/src/test/res/layout/abc_action_menu_layout.xml diff --git a/appinventor/components/tests/res/layout/abc_action_mode_bar.xml b/appinventor/components/src/test/res/layout/abc_action_mode_bar.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_action_mode_bar.xml rename to appinventor/components/src/test/res/layout/abc_action_mode_bar.xml diff --git a/appinventor/components/tests/res/layout/abc_action_mode_close_item_material.xml b/appinventor/components/src/test/res/layout/abc_action_mode_close_item_material.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_action_mode_close_item_material.xml rename to appinventor/components/src/test/res/layout/abc_action_mode_close_item_material.xml diff --git a/appinventor/components/tests/res/layout/abc_activity_chooser_view.xml b/appinventor/components/src/test/res/layout/abc_activity_chooser_view.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_activity_chooser_view.xml rename to appinventor/components/src/test/res/layout/abc_activity_chooser_view.xml diff --git a/appinventor/components/tests/res/layout/abc_activity_chooser_view_list_item.xml b/appinventor/components/src/test/res/layout/abc_activity_chooser_view_list_item.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_activity_chooser_view_list_item.xml rename to appinventor/components/src/test/res/layout/abc_activity_chooser_view_list_item.xml diff --git a/appinventor/components/tests/res/layout/abc_alert_dialog_material.xml b/appinventor/components/src/test/res/layout/abc_alert_dialog_material.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_alert_dialog_material.xml rename to appinventor/components/src/test/res/layout/abc_alert_dialog_material.xml diff --git a/appinventor/components/tests/res/layout/abc_dialog_title_material.xml b/appinventor/components/src/test/res/layout/abc_dialog_title_material.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_dialog_title_material.xml rename to appinventor/components/src/test/res/layout/abc_dialog_title_material.xml diff --git a/appinventor/components/tests/res/layout/abc_expanded_menu_layout.xml b/appinventor/components/src/test/res/layout/abc_expanded_menu_layout.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_expanded_menu_layout.xml rename to appinventor/components/src/test/res/layout/abc_expanded_menu_layout.xml diff --git a/appinventor/components/tests/res/layout/abc_list_menu_item_checkbox.xml b/appinventor/components/src/test/res/layout/abc_list_menu_item_checkbox.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_list_menu_item_checkbox.xml rename to appinventor/components/src/test/res/layout/abc_list_menu_item_checkbox.xml diff --git a/appinventor/components/tests/res/layout/abc_list_menu_item_icon.xml b/appinventor/components/src/test/res/layout/abc_list_menu_item_icon.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_list_menu_item_icon.xml rename to appinventor/components/src/test/res/layout/abc_list_menu_item_icon.xml diff --git a/appinventor/components/tests/res/layout/abc_list_menu_item_layout.xml b/appinventor/components/src/test/res/layout/abc_list_menu_item_layout.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_list_menu_item_layout.xml rename to appinventor/components/src/test/res/layout/abc_list_menu_item_layout.xml diff --git a/appinventor/components/tests/res/layout/abc_list_menu_item_radio.xml b/appinventor/components/src/test/res/layout/abc_list_menu_item_radio.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_list_menu_item_radio.xml rename to appinventor/components/src/test/res/layout/abc_list_menu_item_radio.xml diff --git a/appinventor/components/tests/res/layout/abc_popup_menu_item_layout.xml b/appinventor/components/src/test/res/layout/abc_popup_menu_item_layout.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_popup_menu_item_layout.xml rename to appinventor/components/src/test/res/layout/abc_popup_menu_item_layout.xml diff --git a/appinventor/components/tests/res/layout/abc_screen_content_include.xml b/appinventor/components/src/test/res/layout/abc_screen_content_include.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_screen_content_include.xml rename to appinventor/components/src/test/res/layout/abc_screen_content_include.xml diff --git a/appinventor/components/tests/res/layout/abc_screen_simple.xml b/appinventor/components/src/test/res/layout/abc_screen_simple.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_screen_simple.xml rename to appinventor/components/src/test/res/layout/abc_screen_simple.xml diff --git a/appinventor/components/tests/res/layout/abc_screen_simple_overlay_action_mode.xml b/appinventor/components/src/test/res/layout/abc_screen_simple_overlay_action_mode.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_screen_simple_overlay_action_mode.xml rename to appinventor/components/src/test/res/layout/abc_screen_simple_overlay_action_mode.xml diff --git a/appinventor/components/tests/res/layout/abc_screen_toolbar.xml b/appinventor/components/src/test/res/layout/abc_screen_toolbar.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_screen_toolbar.xml rename to appinventor/components/src/test/res/layout/abc_screen_toolbar.xml diff --git a/appinventor/components/tests/res/layout/abc_search_dropdown_item_icons_2line.xml b/appinventor/components/src/test/res/layout/abc_search_dropdown_item_icons_2line.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_search_dropdown_item_icons_2line.xml rename to appinventor/components/src/test/res/layout/abc_search_dropdown_item_icons_2line.xml diff --git a/appinventor/components/tests/res/layout/abc_search_view.xml b/appinventor/components/src/test/res/layout/abc_search_view.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_search_view.xml rename to appinventor/components/src/test/res/layout/abc_search_view.xml diff --git a/appinventor/components/tests/res/layout/abc_select_dialog_material.xml b/appinventor/components/src/test/res/layout/abc_select_dialog_material.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_select_dialog_material.xml rename to appinventor/components/src/test/res/layout/abc_select_dialog_material.xml diff --git a/appinventor/components/tests/res/layout/abc_simple_dropdown_hint.xml b/appinventor/components/src/test/res/layout/abc_simple_dropdown_hint.xml similarity index 100% rename from appinventor/components/tests/res/layout/abc_simple_dropdown_hint.xml rename to appinventor/components/src/test/res/layout/abc_simple_dropdown_hint.xml diff --git a/appinventor/components/tests/res/layout/activity_main.xml b/appinventor/components/src/test/res/layout/activity_main.xml similarity index 100% rename from appinventor/components/tests/res/layout/activity_main.xml rename to appinventor/components/src/test/res/layout/activity_main.xml diff --git a/appinventor/components/tests/res/layout/bonuspack_bubble.xml b/appinventor/components/src/test/res/layout/bonuspack_bubble.xml similarity index 100% rename from appinventor/components/tests/res/layout/bonuspack_bubble.xml rename to appinventor/components/src/test/res/layout/bonuspack_bubble.xml diff --git a/appinventor/components/tests/res/layout/notification_media_action.xml b/appinventor/components/src/test/res/layout/notification_media_action.xml similarity index 100% rename from appinventor/components/tests/res/layout/notification_media_action.xml rename to appinventor/components/src/test/res/layout/notification_media_action.xml diff --git a/appinventor/components/tests/res/layout/notification_media_cancel_action.xml b/appinventor/components/src/test/res/layout/notification_media_cancel_action.xml similarity index 100% rename from appinventor/components/tests/res/layout/notification_media_cancel_action.xml rename to appinventor/components/src/test/res/layout/notification_media_cancel_action.xml diff --git a/appinventor/components/tests/res/layout/notification_template_big_media.xml b/appinventor/components/src/test/res/layout/notification_template_big_media.xml similarity index 100% rename from appinventor/components/tests/res/layout/notification_template_big_media.xml rename to appinventor/components/src/test/res/layout/notification_template_big_media.xml diff --git a/appinventor/components/tests/res/layout/notification_template_big_media_narrow.xml b/appinventor/components/src/test/res/layout/notification_template_big_media_narrow.xml similarity index 100% rename from appinventor/components/tests/res/layout/notification_template_big_media_narrow.xml rename to appinventor/components/src/test/res/layout/notification_template_big_media_narrow.xml diff --git a/appinventor/components/tests/res/layout/notification_template_lines.xml b/appinventor/components/src/test/res/layout/notification_template_lines.xml similarity index 100% rename from appinventor/components/tests/res/layout/notification_template_lines.xml rename to appinventor/components/src/test/res/layout/notification_template_lines.xml diff --git a/appinventor/components/tests/res/layout/notification_template_media.xml b/appinventor/components/src/test/res/layout/notification_template_media.xml similarity index 100% rename from appinventor/components/tests/res/layout/notification_template_media.xml rename to appinventor/components/src/test/res/layout/notification_template_media.xml diff --git a/appinventor/components/tests/res/layout/notification_template_part_chronometer.xml b/appinventor/components/src/test/res/layout/notification_template_part_chronometer.xml similarity index 100% rename from appinventor/components/tests/res/layout/notification_template_part_chronometer.xml rename to appinventor/components/src/test/res/layout/notification_template_part_chronometer.xml diff --git a/appinventor/components/tests/res/layout/notification_template_part_time.xml b/appinventor/components/src/test/res/layout/notification_template_part_time.xml similarity index 100% rename from appinventor/components/tests/res/layout/notification_template_part_time.xml rename to appinventor/components/src/test/res/layout/notification_template_part_time.xml diff --git a/appinventor/components/tests/res/layout/select_dialog_item_material.xml b/appinventor/components/src/test/res/layout/select_dialog_item_material.xml similarity index 100% rename from appinventor/components/tests/res/layout/select_dialog_item_material.xml rename to appinventor/components/src/test/res/layout/select_dialog_item_material.xml diff --git a/appinventor/components/tests/res/layout/select_dialog_multichoice_material.xml b/appinventor/components/src/test/res/layout/select_dialog_multichoice_material.xml similarity index 100% rename from appinventor/components/tests/res/layout/select_dialog_multichoice_material.xml rename to appinventor/components/src/test/res/layout/select_dialog_multichoice_material.xml diff --git a/appinventor/components/tests/res/layout/select_dialog_singlechoice_material.xml b/appinventor/components/src/test/res/layout/select_dialog_singlechoice_material.xml similarity index 100% rename from appinventor/components/tests/res/layout/select_dialog_singlechoice_material.xml rename to appinventor/components/src/test/res/layout/select_dialog_singlechoice_material.xml diff --git a/appinventor/components/tests/res/layout/support_simple_spinner_dropdown_item.xml b/appinventor/components/src/test/res/layout/support_simple_spinner_dropdown_item.xml similarity index 100% rename from appinventor/components/tests/res/layout/support_simple_spinner_dropdown_item.xml rename to appinventor/components/src/test/res/layout/support_simple_spinner_dropdown_item.xml diff --git a/appinventor/components/tests/res/values/values.xml b/appinventor/components/src/test/res/values/values.xml similarity index 100% rename from appinventor/components/tests/res/values/values.xml rename to appinventor/components/src/test/res/values/values.xml diff --git a/appinventor/components/tests/README.md b/appinventor/components/tests/README.md deleted file mode 100644 index a56be5eee53..00000000000 --- a/appinventor/components/tests/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Test Resources - -The file AndroidManifest.xml and the XML and PNG resources under res/ -in this directory would typically be generated during test compilation -using gradle. Since App Inventor uses ant as its build system, these -resources are included to support the use of Robolectric as a test -runner. From 2642fe73e68cf893e609129f34e43ecd5b90071d Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Sat, 15 Oct 2022 04:52:52 +0530 Subject: [PATCH 28/35] Split appengine module k --- .../appengine-backend/build.gradle.kts | 27 + .../server/AdminInfoServiceImpl.java | 0 .../server/BlobUpgradeServlet.java | 0 .../server/BuildOutputServlet.java | 0 .../server/ComponentServiceImpl.java | 0 .../appinventor/server/CrashReport.java | 0 .../appinventor/server/DownloadServlet.java | 0 .../appinventor/server/FeedbackServlet.java | 0 .../appinventor/server/FileExporter.java | 0 .../appinventor/server/FileExporterImpl.java | 0 .../appinventor/server/FileImporter.java | 0 .../server/FileImporterException.java | 0 .../appinventor/server/FileImporterImpl.java | 0 .../appinventor/server/GalleryEmail.java | 0 .../server/GetMotdServiceImpl.java | 0 .../google/appinventor/server/LocalUser.java | 0 .../appinventor/server/LoginServlet.java | 0 .../appinventor/server/LogoutServlet.java | 0 .../appinventor/server/OdeAuthFilter.java | 0 .../server/OdeRemoteServiceServlet.java | 0 .../google/appinventor/server/OdeServlet.java | 0 .../server/ProjectServiceImpl.java | 0 .../server/ReceiveBuildServlet.java | 0 .../appinventor/server/RestServlet.java | 0 .../com/google/appinventor/server/Server.java | 0 .../google/appinventor/server/TosServlet.java | 0 .../appinventor/server/UploadServlet.java | 0 .../server/UserInfoServiceImpl.java | 0 .../google/appinventor/server/Whitelist.java | 0 .../components/FirebaseAuthServiceImpl.java | 0 .../server/cookieauth/CookieAuth.java | 0 .../server/cookieauth/cookie.proto | 0 .../encryption/EncryptionException.java | 0 .../server/encryption/EncryptionStrategy.java | 0 .../server/encryption/Encryptor.java | 0 .../server/encryption/KeyczarEncryptor.java | 0 .../server/encryption/NopEncryptor.java | 0 .../google/appinventor/server/flags/Flag.java | 0 .../flags/IllegalFlagValueException.java | 0 .../server/loginmessages_en.properties | 0 .../server/loginmessages_lt.properties | 0 .../server/loginmessages_pt.properties | 0 .../server/loginmessages_zh_cn.properties | 0 .../server/project/CommonProjectService.java | 0 .../server/project/utils/Security.java | 0 .../server/project/utils/TempFiles.java | 0 .../project/youngandroid/GalleryProtobuf.java | 0 .../project/youngandroid/GalleryToken.java | 0 .../YoungAndroidProjectService.java | 0 .../YoungAndroidSettingsBuilder.java | 0 .../project/youngandroid/gallerytoken.proto | 0 .../properties/json/ServerJsonArray.java | 0 .../properties/json/ServerJsonBoolean.java | 0 .../properties/json/ServerJsonNumber.java | 0 .../properties/json/ServerJsonObject.java | 0 .../properties/json/ServerJsonParser.java | 0 .../properties/json/ServerJsonString.java | 0 .../properties/json/ServerJsonValue.java | 0 .../server/storage/BlobReadException.java | 0 .../server/storage/BlobWriteException.java | 0 .../server/storage/ObjectifyException.java | 0 .../server/storage/ObjectifyStorageIo.java | 0 .../appinventor/server/storage/StorageIo.java | 0 .../storage/StorageIoInstanceHolder.java | 0 .../server/storage/StoredData.java | 0 .../storage/UnauthorizedAccessException.java | 0 .../storage/UserAlreadyExistsException.java | 0 .../server/tokenauth/CloudDBTokenAuth.java | 0 .../tokenauth/TokenAuthServiceImpl.java | 0 .../server/tokenauth/TranslatorToken.java | 0 .../server/tokenauth/clouddb.proto | 0 .../appinventor/server/tokenauth/tr.proto | 0 .../appinventor/server/tokens/Token.java | 0 .../server/tokens/TokenException.java | 0 .../appinventor/server/tokens/TokenProto.java | 0 .../appinventor/server/tokens/token.proto | 0 .../appinventor/server/util/BuildData.java | 0 .../appinventor/server/util/CacheHeaders.java | 0 .../server/util/CacheHeadersImpl.java | 0 .../appinventor/server/util/CsvParser.java | 0 .../appinventor/server/util/FileUtil.java | 0 .../server/util/ModifiedHeaders.java | 0 .../appinventor/server/util/PasswordHash.java | 0 .../appinventor/server/util/UriBuilder.java | 0 .../server/util/VersionString.java | 0 .../appinventor/server/Bad-Extension.aix | 0 .../com/google/appinventor/server/BarOld.aix | Bin .../com/google/appinventor/server/Buggy.zip | 0 .../server/ComponentServiceTest.java | 0 .../appinventor/server/Corrupt-Extension.aix | Bin ...CorruptExtensionTestMissingDescriptors.aia | Bin .../server/DownloadServletTest.java | 0 .../google/appinventor/server/EmptyZip.zip | 0 .../Extension-Bundle-With-2-Extensions.aix | Bin .../appinventor/server/Extension-Bundle.aix | Bin .../server/FCQN-Single-Extension.aix | Bin .../server/FileExporterImplTest.java | 0 .../server/FileImporterImplTest.java | 0 .../com/google/appinventor/server/FooBar.aix | Bin .../com/google/appinventor/server/FooOld.aix | Bin .../server/LocalDatastoreTestCase.java | 0 .../server/NotAValidProjectArchive.zip | Bin .../appinventor/server/OdeAuthFilterTest.java | 0 .../appinventor/server/OldExtensionTest.aia | Bin .../google/appinventor/server/Project1.zip | Bin .../server/ProjectServiceTest.java | 0 .../appinventor/server/ProjectWithAssets.zip | Bin .../server/Transition-Extension-Bundle.aix | Bin ...ansition-Extension-With-Files-Reversed.aix | Bin .../appinventor/server/WEB-INF/whitelist | 0 .../appinventor/server/WhitelistTest.java | 0 .../encryption/KeyczarEncryptorTest.java | 0 .../appinventor/server/flags/FlagTest.java | 0 .../appinventor/server/package.Component.aix | Bin .../server/project/utils/SecurityTest.java | 0 .../server/project/utils/TempFilesTest.java | 0 .../YoungAndroidProjectServiceTest.java | 0 .../storage/ObjectifyStorageIoTest.java | 0 .../server/test.EmptyComponentDescriptor.aix | Bin .../appinventor/server/test.Extension1.aix | Bin .../appinventor/server/test.Extension3.aix | Bin .../appinventor/server/test.Extension4.aix | Bin .../server/test.NoComponentDescriptor.aix | Bin .../appinventor/server/test2.Extension2.aix | Bin .../server/util/VersionStringTest.java | 0 .../YaClient-dev.gwt.xml | 0 .../YaClient.gwt.xml | 0 .../appengine-frontend/build.gradle.kts | 15 + .../appinventor/client/AdminUserList.java | 0 .../appinventor/client/AssetManager.java | 0 .../google/appinventor/client/BugReport.java | 0 .../client/ConnectProgressBar.java | 0 .../appinventor/client/DesignToolbar.java | 0 .../appinventor/client/ErrorReporter.java | 0 .../client/ExtendedServiceProxy.java | 0 .../com/google/appinventor/client/Images.java | 0 .../client/LoadGalleryProject.java | 0 .../com/google/appinventor/client/Log.java | 0 .../com/google/appinventor/client/Logger.java | 0 .../appinventor/client/MotdFetcher.java | 0 .../appinventor/client/MultiRegistry.java | 0 .../com/google/appinventor/client/Ode.java | 0 .../appinventor/client/OdeAsyncCallback.java | 0 .../appinventor/client/OdeBoxRegistry.java | 0 .../appinventor/client/OdeMessages.java | 0 .../client/OdeMessages_ca.properties | 0 .../client/OdeMessages_de.properties | 0 .../client/OdeMessages_es_ES.properties | 0 .../client/OdeMessages_fr_FR.properties | 0 .../client/OdeMessages_hu.properties | 3360 ++++++++--------- .../client/OdeMessages_hy.properties | 0 .../client/OdeMessages_it_IT.properties | 0 .../client/OdeMessages_ko_KR.properties | 0 .../client/OdeMessages_lt.properties | 0 .../client/OdeMessages_nl.properties | 0 .../client/OdeMessages_pl.properties | 0 .../client/OdeMessages_pt.properties | 0 .../client/OdeMessages_pt_BR.properties | 0 .../client/OdeMessages_ru.properties | 0 .../client/OdeMessages_sv.properties | 0 .../client/OdeMessages_tr.properties | 0 .../client/OdeMessages_zh_CN.properties | 0 .../client/OdeMessages_zh_TW.properties | 0 .../client/ProjectEditorRegistry.java | 0 .../google/appinventor/client/Registry.java | 0 .../appinventor/client/RpcListener.java | 0 .../client/RpcListenerAdapter.java | 0 .../appinventor/client/RpcStatusPopup.java | 0 .../appinventor/client/StatusPanel.java | 0 .../appinventor/client/SysOutLogger.java | 0 .../google/appinventor/client/TopPanel.java | 0 .../google/appinventor/client/TopToolbar.java | 0 .../client/admin/AdminComparators.java | 0 .../client/boxes/AdminUserListBox.java | 0 .../client/boxes/AssetListBox.java | 0 .../client/boxes/BlockSelectorBox.java | 0 .../client/boxes/MessagesOutputBox.java | 0 .../appinventor/client/boxes/MotdBox.java | 0 .../appinventor/client/boxes/OdeLogBox.java | 0 .../appinventor/client/boxes/PaletteBox.java | 0 .../client/boxes/ProjectListBox.java | 0 .../client/boxes/PropertiesBox.java | 0 .../client/boxes/SourceStructureBox.java | 0 .../appinventor/client/boxes/ViewerBox.java | 0 .../client/boxes/package-info.java | 0 .../client/editor/EditorManager.java | 0 .../appinventor/client/editor/FileEditor.java | 0 .../client/editor/ProjectEditor.java | 0 .../client/editor/ProjectEditorFactory.java | 0 .../client/editor/package-info.java | 0 .../editor/simple/ComponentDatabase.java | 0 .../simple/ComponentNotFoundException.java | 0 .../simple/SimpleComponentDatabase.java | 0 .../client/editor/simple/SimpleEditor.java | 0 .../SimpleNonVisibleComponentsPanel.java | 0 .../simple/SimpleVisibleComponentsPanel.java | 0 .../components/DataFileChangeListener.java | 0 .../DesignPreviewChangeListener.java | 0 .../simple/components/FormChangeListener.java | 0 .../editor/simple/components/LayoutInfo.java | 0 .../components/MockAreaChartDataModel.java | 0 .../simple/components/MockAreaChartView.java | 0 .../simple/components/MockAxisChartView.java | 0 .../editor/simple/components/MockBall.java | 0 .../components/MockBarChartDataModel.java | 0 .../simple/components/MockBarChartView.java | 0 .../editor/simple/components/MockButton.java | 0 .../simple/components/MockButtonBase.java | 0 .../editor/simple/components/MockCanvas.java | 0 .../simple/components/MockCanvasLayout.java | 0 .../editor/simple/components/MockChart.java | 0 .../simple/components/MockChartData.java | 0 .../simple/components/MockChartData2D.java | 0 .../simple/components/MockChartDataModel.java | 0 .../simple/components/MockChartLayout.java | 0 .../simple/components/MockChartView.java | 0 .../simple/components/MockCheckBox.java | 0 .../editor/simple/components/MockCircle.java | 0 .../editor/simple/components/MockCloudDB.java | 0 .../simple/components/MockComponent.java | 0 .../simple/components/MockComponentsUtil.java | 0 .../simple/components/MockContactPicker.java | 0 .../simple/components/MockContainer.java | 0 .../simple/components/MockDataFile.java | 0 .../simple/components/MockDatePicker.java | 0 .../simple/components/MockEmailPicker.java | 0 .../components/MockFeatureCollection.java | 0 .../MockFeatureCollectionLayout.java | 0 .../simple/components/MockFirebaseDB.java | 0 .../editor/simple/components/MockForm.java | 0 .../simple/components/MockFormHelper.java | 0 .../simple/components/MockFormLayout.java | 0 .../components/MockFusionTablesControl.java | 0 .../simple/components/MockHVArrangement.java | 0 .../components/MockHVArrangementHelper.java | 0 .../simple/components/MockHVLayout.java | 0 .../simple/components/MockHVLayoutBase.java | 0 .../components/MockHorizontalArrangement.java | 0 .../editor/simple/components/MockImage.java | 0 .../simple/components/MockImageBase.java | 0 .../simple/components/MockImagePicker.java | 0 .../simple/components/MockImageSprite.java | 0 .../editor/simple/components/MockLabel.java | 0 .../editor/simple/components/MockLayout.java | 0 .../MockLineChartBaseDataModel.java | 0 .../components/MockLineChartDataModel.java | 0 .../simple/components/MockLineChartView.java | 0 .../components/MockLineChartViewBase.java | 0 .../simple/components/MockLineString.java | 0 .../simple/components/MockListPicker.java | 0 .../simple/components/MockListView.java | 0 .../editor/simple/components/MockMap.java | 0 .../simple/components/MockMapFeature.java | 0 .../simple/components/MockMapFeatureBase.java | 0 .../MockMapFeatureBaseWithFill.java | 0 .../simple/components/MockMapLayout.java | 0 .../editor/simple/components/MockMarker.java | 0 .../components/MockNonVisibleComponent.java | 0 .../components/MockPasswordTextBox.java | 0 .../components/MockPhoneNumberPicker.java | 0 .../components/MockPieChartDataModel.java | 0 .../simple/components/MockPieChartView.java | 0 .../components/MockPointChartDataModel.java | 0 .../simple/components/MockPointChartView.java | 0 .../editor/simple/components/MockPolygon.java | 0 .../simple/components/MockPolygonBase.java | 0 .../simple/components/MockRadioButton.java | 0 .../simple/components/MockRectangle.java | 0 .../components/MockScatterChartDataModel.java | 0 .../components/MockScatterChartView.java | 0 .../MockScrollHorizontalArrangement.java | 0 .../MockScrollVerticalArrangement.java | 0 .../editor/simple/components/MockSlider.java | 0 .../editor/simple/components/MockSpinner.java | 0 .../simple/components/MockSpreadsheet.java | 0 .../editor/simple/components/MockSprite.java | 0 .../editor/simple/components/MockSwitch.java | 0 .../components/MockTableArrangement.java | 0 .../simple/components/MockTableLayout.java | 0 .../editor/simple/components/MockTextBox.java | 0 .../simple/components/MockTextBoxBase.java | 0 .../simple/components/MockTimePicker.java | 0 .../simple/components/MockToggleBase.java | 0 .../simple/components/MockTranslator.java | 0 .../components/MockVerticalArrangement.java | 0 .../simple/components/MockVideoPlayer.java | 0 .../components/MockVisibleComponent.java | 0 .../simple/components/MockWebViewer.java | 0 .../editor/simple/components/MockWrapper.java | 0 .../simple/components/package-info.java | 0 .../components/utils/PropertiesUtil.java | 0 .../simple/components/utils/SVGPanel.java | 0 .../client/editor/simple/package-info.java | 0 .../palette/AbstractPaletteItemWidget.java | 0 .../simple/palette/ComponentHelpWidget.java | 0 .../simple/palette/ComponentRemoveWidget.java | 0 .../simple/palette/DropTargetProvider.java | 0 .../palette/SimpleComponentDescriptor.java | 0 .../simple/palette/SimplePaletteItem.java | 0 .../simple/palette/SimplePalettePanel.java | 0 .../editor/simple/palette/package-info.java | 0 .../BlockDrawerSelectionListener.java | 0 .../editor/youngandroid/BlocklyPanel.java | 0 .../youngandroid/LoadBlocksException.java | 0 .../editor/youngandroid/TutorialPanel.java | 0 .../editor/youngandroid/YaBlocksEditor.java | 0 .../editor/youngandroid/YaFormEditor.java | 0 .../editor/youngandroid/YaProjectEditor.java | 0 .../youngandroid/YailGenerationException.java | 0 .../youngandroid/events/EventHelper.java | 0 .../editor/youngandroid/i18n/BlocklyMsg.java | 0 .../i18n/BlocklyTranslationGenerator.java | 0 .../editor/youngandroid/package-info.java | 0 .../palette/LegoPaletteHelper.java | 0 .../palette/OrderedPaletteHelper.java | 0 .../youngandroid/palette/PaletteHelper.java | 0 .../palette/YoungAndroidPalettePanel.java | 0 .../youngandroid/palette/package-info.java | 0 .../youngandroid/properties/ListWithNone.java | 0 ...ometerSensitivityChoicePropertyEditor.java | 0 ...gAndroidAlignmentChoicePropertyEditor.java | 0 ...ungAndroidAssetSelectorPropertyEditor.java | 0 .../YoungAndroidBooleanPropertyEditor.java | 0 ...ndroidButtonShapeChoicePropertyEditor.java | 0 ...roidChartLineTypeChoicePropertyEditor.java | 0 ...idChartPointShapeChoicePropertyEditor.java | 0 ...gAndroidChartTypeChoicePropertyEditor.java | 0 ...YoungAndroidColorChoicePropertyEditor.java | 0 ...ndroidComponentSelectorPropertyEditor.java | 0 ...oungAndroidDataColumnSelectorProperty.java | 0 .../YoungAndroidDefaultURLPropertyEditor.java | 0 .../YoungAndroidFileScopePropertyEditor.java | 0 .../YoungAndroidFloatRangePropertyEditor.java | 0 ...droidFontTypefaceChoicePropertyEditor.java | 0 .../YoungAndroidGeoJSONPropertyEditor.java | 0 ...gAndroidGeographicPointPropertyEditor.java | 0 ...rizontalAlignmentChoicePropertyEditor.java | 0 ...oungAndroidIntegerRangePropertyEditor.java | 0 ...v3ColorSensorModeChoicePropertyEditor.java | 0 ...Ev3GyroSensorModeChoicePropertyEditor.java | 0 ...LegoEv3SensorPortChoicePropertyEditor.java | 0 ...rasonicSensorModeChoicePropertyEditor.java | 0 ...LegoNxtSensorPortChoicePropertyEditor.java | 0 .../YoungAndroidLengthPropertyEditor.java | 0 ...gAndroidListViewAddDataPropertyEditor.java | 0 ...oidListViewLayoutChoicePropertyEditor.java | 0 ...ungAndroidMapScaleUnitsPropertyEditor.java | 0 .../YoungAndroidMapTypePropertyEditor.java | 0 ...dNavigationMethodChoicePropertyEditor.java | 0 ...RecyclerViewOrientationPropertyEditor.java | 0 ...idScreenAnimationChoicePropertyEditor.java | 0 ...ScreenOrientationChoicePropertyEditor.java | 0 ...ensorDistIntervalChoicePropertyEditor.java | 0 ...ensorTimeIntervalChoicePropertyEditor.java | 0 ...oungAndroidSizingChoicePropertyEditor.java | 0 ...ungAndroidTextReceivingPropertyEditor.java | 0 ...YoungAndroidThemeChoicePropertyEditor.java | 0 ...ndroidToastLengthChoicePropertyEditor.java | 0 ...VerticalAlignmentChoicePropertyEditor.java | 0 .../youngandroid/properties/package-info.java | 0 .../explorer/SourceStructureExplorer.java | 0 .../explorer/SourceStructureExplorerItem.java | 0 .../explorer/commands/AddFormCommand.java | 0 .../explorer/commands/BuildCommand.java | 0 .../explorer/commands/ChainableCommand.java | 0 .../explorer/commands/CommandRegistry.java | 0 .../CopyYoungAndroidProjectCommand.java | 0 .../explorer/commands/DeleteFileCommand.java | 0 .../commands/DownloadFileCommand.java | 0 .../DownloadProjectOutputCommand.java | 0 .../commands/EnsurePhoneConnectedCommand.java | 0 .../commands/GenerateYailCommand.java | 0 .../explorer/commands/MiniProgressBar.java | 0 .../explorer/commands/PreviewFileCommand.java | 0 .../explorer/commands/ProjectNodeCommand.java | 0 .../commands/SaveAllEditorsCommand.java | 0 .../commands/SaveScreenCheckpointCommand.java | 0 .../explorer/commands/ShowBarcodeCommand.java | 0 .../commands/ShowProgressBarCommand.java | 0 .../commands/WaitForBuildResultCommand.java | 0 .../commands/WarningDialogCommand.java | 0 .../explorer/commands/package-info.java | 0 .../explorer/dialogs/NoProjectDialogBox.java | 0 .../dialogs/NoProjectDialogBox.ui.xml | 0 ...ogBoxUiBinderImplGenMessages_ca.properties | 0 ...ogBoxUiBinderImplGenMessages_en.properties | 0 ...ogBoxUiBinderImplGenMessages_hy.properties | 0 .../dialogs/ProgressBarDialogBox.java | 0 .../client/explorer/package-info.java | 0 .../ComponentDatabaseChangeListener.java | 0 .../client/explorer/project/Project.java | 0 .../project/ProjectChangeAdapter.java | 0 .../project/ProjectChangeListener.java | 0 .../explorer/project/ProjectComparators.java | 0 .../explorer/project/ProjectManager.java | 0 .../project/ProjectManagerEventAdapter.java | 0 .../project/ProjectManagerEventListener.java | 0 .../project/ProjectNodeContextMenu.java | 0 .../client/explorer/project/package-info.java | 0 .../explorer/youngandroid/AssetList.java | 0 .../explorer/youngandroid/GalleryImages.java | 0 .../explorer/youngandroid/ProjectList.java | 0 .../explorer/youngandroid/ProjectToolbar.java | 0 .../explorer/youngandroid/androidIcon.png | Bin .../explorer/youngandroid/genericApp.png | Bin .../explorer/youngandroid/package-info.java | 0 .../google/appinventor/client/languages.json | 0 .../client/output/MessagesOutput.java | 0 .../appinventor/client/output/MotdUi.java | 0 .../appinventor/client/output/OdeLog.java | 0 .../appinventor/client/package-info.java | 0 .../BadPropertyEditorException.java | 0 .../client/properties/Properties.java | 0 .../client/properties/Property.java | 0 .../properties/json/ClientJsonArray.java | 0 .../properties/json/ClientJsonBoolean.java | 0 .../properties/json/ClientJsonNumber.java | 0 .../properties/json/ClientJsonObject.java | 0 .../properties/json/ClientJsonParser.java | 0 .../properties/json/ClientJsonString.java | 0 .../properties/json/ClientJsonValue.java | 0 .../client/settings/CommonSettings.java | 0 .../appinventor/client/settings/Settings.java | 0 .../settings/SettingsAccessProvider.java | 0 .../settings/project/ProjectSettings.java | 0 .../project/YoungAndroidSettings.java | 0 .../client/settings/user/BlocksSettings.java | 0 .../client/settings/user/GeneralSettings.java | 0 .../client/settings/user/SplashSettings.java | 0 .../client/settings/user/UserSettings.java | 0 .../settings/user/YoungAndroidSettings.java | 0 .../appinventor/client/tracking/Tracking.java | 0 .../appinventor/client/utils/Downloader.java | 0 .../client/utils/FocusImplSafari.java | 0 .../client/utils/FocusImplStandard.java | 0 .../client/utils/HTML5DragDrop.java | 0 .../client/utils/MessageDialog.java | 0 .../client/utils/PZAwarePositionCallback.java | 0 .../appinventor/client/utils/Uploader.java | 0 .../google/appinventor/client/utils/Urls.java | 0 .../appinventor/client/utils/html5dnd.js | 0 .../client/widgets/ActionDropDown.java | 0 .../client/widgets/ClonedWidget.java | 0 .../client/widgets/ContextMenu.java | 0 .../client/widgets/DropDownButton.java | 0 .../client/widgets/ExpiredServiceOverlay.java | 0 .../widgets/ExpiredServiceOverlay.ui.xml | 0 .../appinventor/client/widgets/Icon.java | 0 .../client/widgets/LabeledTextBox.java | 0 .../client/widgets/TextButton.java | 0 .../appinventor/client/widgets/Toolbar.java | 0 .../appinventor/client/widgets/Validator.java | 0 .../appinventor/client/widgets/boxes/Box.java | 0 .../client/widgets/boxes/BoxRegistry.java | 0 .../client/widgets/boxes/ColumnLayout.java | 0 .../client/widgets/boxes/HandlerPanel.java | 0 .../client/widgets/boxes/Layout.java | 0 .../widgets/boxes/LayoutChangeListener.java | 0 .../client/widgets/boxes/WorkAreaPanel.java | 0 .../client/widgets/dnd/DragSource.java | 0 .../client/widgets/dnd/DragSourcePanel.java | 0 .../client/widgets/dnd/DragSourceSupport.java | 0 .../client/widgets/dnd/DropTarget.java | 0 .../AdditionalChoicePropertyEditor.java | 0 .../properties/BooleanPropertyEditor.java | 0 .../properties/ChoicePropertyEditor.java | 0 .../properties/ColorChoicePropertyEditor.java | 0 .../CountryChoicePropertyEditor.java | 0 .../properties/EditableProperties.java | 0 .../widgets/properties/EditableProperty.java | 0 .../properties/FloatPropertyEditor.java | 0 .../properties/IntegerPropertyEditor.java | 0 .../LanguageChoicePropertyEditor.java | 0 .../NonNegativeFloatPropertyEditor.java | 0 .../NonNegativeIntegerPropertyEditor.java | 0 .../widgets/properties/PropertiesPanel.java | 0 .../properties/PropertyChangeListener.java | 0 .../widgets/properties/PropertyEditor.java | 0 .../ScalingChoicePropertyEditor.java | 0 .../properties/StringPropertyEditor.java | 0 .../properties/SubsetJSONPropertyEditor.java | 0 .../properties/TextAreaPropertyEditor.java | 0 .../properties/TextPropertyEditor.java | 0 .../properties/TextPropertyEditorBase.java | 0 .../client/wizards/ComponentImportWizard.java | 0 .../client/wizards/ComponentRenameWizard.java | 0 .../client/wizards/ComponentUploadWizard.java | 0 .../wizards/DownloadUserSourceWizard.java | 0 .../client/wizards/FileUploadWizard.java | 0 .../wizards/InputTemplateUrlWizard.java | 0 .../client/wizards/KeystoreUploadWizard.java | 0 .../client/wizards/NewProjectWizard.java | 0 .../client/wizards/NewUrlDialogCallback.java | 0 .../client/wizards/ProjectUploadWizard.java | 0 .../wizards/RequestNewProjectNameWizard.java | 0 .../RequestProjectNewNameInterface.java | 0 .../client/wizards/TemplateUploadWizard.java | 0 .../client/wizards/UrlImportWizard.java | 0 .../appinventor/client/wizards/Wizard.java | 0 .../NewYoungAndroidProjectWizard.java | 0 .../client/youngandroid/TextValidators.java | 0 .../YoungAndroidFormUpgrader.java | 0 .../appinventor/client/MultiRegistryTest.java | 0 .../google/appinventor/client/OdeTest.java | 0 .../appinventor/client/RegistryTest.java | 0 .../editor/simple/ComponentDatabaseTest.java | 0 .../properties/ListWithNoneTest.java | 0 .../project/ProjectComparatorsTest.java | 0 .../youngandroid/TextValidatorsTest.java | 0 appinventor/appengine-shared/build.gradle.kts | 3 + .../{appengine => appengine-shared}/build.xml | 0 .../com/google/appinventor/images/YRLogo.png | Bin .../images/accelerometersensor.png | Bin .../appinventor/images/activityStarter.png | Bin .../appinventor/images/appinvlogo-32.png | Bin .../com/google/appinventor/images/arduino.png | Bin .../com/google/appinventor/images/ball.png | Bin .../appinventor/images/barcodeScanner.png | Bin .../google/appinventor/images/barometer.png | Bin .../google/appinventor/images/bluetooth.png | Bin .../google/appinventor/images/boxClose.png | Bin .../com/google/appinventor/images/boxMenu.png | Bin .../google/appinventor/images/boxMinimize.png | Bin .../google/appinventor/images/boxRestore.png | Bin .../com/google/appinventor/images/button.png | Bin .../google/appinventor/images/camcorder.png | Bin .../com/google/appinventor/images/camera.png | Bin .../com/google/appinventor/images/canvas.png | Bin .../com/google/appinventor/images/chart.png | Bin .../google/appinventor/images/chartData.png | Bin .../google/appinventor/images/checkbox.png | Bin .../com/google/appinventor/images/circle.png | Bin .../com/google/appinventor/images/clock.png | Bin .../com/google/appinventor/images/close.png | Bin .../com/google/appinventor/images/cloudDB.png | Bin .../google/appinventor/images/codi_vert.png | Bin .../com/google/appinventor/images/colors.png | Bin .../appinventor/images/contactPicker.png | Bin .../com/google/appinventor/images/control.png | Bin .../com/google/appinventor/images/corner.png | Bin .../appinventor/images/corner_green.png | Bin .../google/appinventor/images/dataFile.png | Bin .../google/appinventor/images/datePicker.png | Bin .../com/google/appinventor/images/delete.png | Bin 0 -> 297 bytes .../appinventor/images/dictionaries.png | Bin .../google/appinventor/images/emailPicker.png | Bin .../google/appinventor/images/extension.png | Bin .../appinventor/images/featurecollection.png | Bin .../com/google/appinventor/images/file.png | Bin .../com/google/appinventor/images/find.png | Bin .../google/appinventor/images/firebaseDB.png | Bin .../com/google/appinventor/images/form.png | Bin .../appinventor/images/fusiontables.png | Bin .../google/appinventor/images/gameClient.png | Bin .../com/google/appinventor/images/get-app.png | Bin .../google/appinventor/images/graydient.png | Bin .../google/appinventor/images/groupGame.png | Bin .../appinventor/images/gyroscopesensor.png | Bin .../com/google/appinventor/images/help.png | Bin .../google/appinventor/images/horizontal.png | Bin .../google/appinventor/images/hygrometer.png | Bin .../appinventor/images/iOSBookmarkBlack.png | Bin .../appinventor/images/iOSBookmarkWhite.png | Bin .../google/appinventor/images/iPadBlackFB.png | Bin .../appinventor/images/iPadLeftWhiteFB.png | Bin .../appinventor/images/iPadRightBlack.png | Bin .../appinventor/images/iPadRightWhite.png | Bin .../appinventor/images/iPhoneLeftBlack.png | Bin .../appinventor/images/iPhoneLeftWhiteFB.png | Bin .../appinventor/images/iPhoneRightBlack.png | Bin .../appinventor/images/iPhoneRightWhite.png | Bin .../com/google/appinventor/images/image.png | Bin .../google/appinventor/images/imagePicker.png | Bin .../google/appinventor/images/imageSprite.png | Bin .../com/google/appinventor/images/label.png | Bin .../appinventor/images/legoMindstormsEv3.png | Bin .../appinventor/images/legoMindstormsNxt.png | Bin .../google/appinventor/images/lightsensor.png | Bin .../google/appinventor/images/linestring.png | Bin .../google/appinventor/images/listPicker.png | Bin .../google/appinventor/images/listView.png | Bin .../com/google/appinventor/images/listbox.png | Bin .../com/google/appinventor/images/lists.png | Bin .../appinventor/images/locationSensor.png | Bin .../com/google/appinventor/images/logger.png | Bin .../com/google/appinventor/images/logic.png | Bin .../com/google/appinventor/images/logo.png | Bin .../appinventor/images/magneticSensor.png | Bin .../com/google/appinventor/images/map.png | Bin .../com/google/appinventor/images/marker.png | Bin .../com/google/appinventor/images/math.png | Bin .../appinventor/images/mediaIcon_audio.png | Bin .../appinventor/images/mediaIcon_img.png | Bin .../appinventor/images/mediaIcon_video.png | Bin .../google/appinventor/images/mediastore.png | Bin .../google/appinventor/images/navigation.png | Bin .../google/appinventor/images/nearfield.png | Bin .../google/appinventor/images/notifier.png | Bin .../appinventor/images/orientationsensor.png | Bin .../appinventor/images/passwordtextbox.png | Bin .../google/appinventor/images/pedometer.png | Bin .../google/appinventor/images/phoneCall.png | Bin .../appinventor/images/phoneNumberPicker.png | Bin .../google/appinventor/images/phonebar.png | Bin .../images/phonebarAndroidMaterial.png | Bin .../com/google/appinventor/images/phoneip.png | Bin .../com/google/appinventor/images/player.png | Bin .../com/google/appinventor/images/polygon.png | Bin .../google/appinventor/images/procedures.png | Bin .../google/appinventor/images/progressbar.png | Bin .../appinventor/images/proximitysensor.png | Bin .../com/google/appinventor/images/purr.png | Bin .../google/appinventor/images/radiobutton.png | Bin .../google/appinventor/images/rectangle.png | Bin .../appinventor/images/recyclerView.png | Bin .../com/google/appinventor/images/sharing.png | Bin .../com/google/appinventor/images/sky.png | Bin .../com/google/appinventor/images/slider.png | Bin .../com/google/appinventor/images/sound.png | Bin .../google/appinventor/images/soundEffect.png | Bin .../appinventor/images/soundRecorder.png | Bin .../appinventor/images/speechRecognizer.png | Bin .../com/google/appinventor/images/spin_16.gif | Bin .../com/google/appinventor/images/spinner.png | Bin .../google/appinventor/images/spreadsheet.png | Bin .../com/google/appinventor/images/switch.png | Bin .../com/google/appinventor/images/table.png | Bin .../appinventor/images/talkToMeLogo.png | Bin .../com/google/appinventor/images/text.png | Bin .../appinventor/images/textToSpeech.png | Bin .../com/google/appinventor/images/textbox.png | Bin .../com/google/appinventor/images/texting.png | Bin .../google/appinventor/images/thermometer.png | Bin .../google/appinventor/images/timePicker.png | Bin .../com/google/appinventor/images/tinyDB.png | Bin .../google/appinventor/images/tinyWebDB.png | Bin .../google/appinventor/images/translator.png | Bin .../com/google/appinventor/images/twitter.png | Bin .../google/appinventor/images/variables.png | Bin .../google/appinventor/images/vertical.png | Bin .../google/appinventor/images/videoPlayer.png | Bin .../com/google/appinventor/images/voting.png | Bin .../com/google/appinventor/images/web.png | Bin .../com/google/appinventor/images/webDB.png | Bin .../google/appinventor/images/webviewer.png | Bin .../appinventor/images/webviewerbig.png | Bin .../com/google/appinventor/images/wilson.png | Bin .../com/google/appinventor/images/yandex.png | Bin .../rebind/ExtendedServiceProxyGenerator.java | 0 .../shared/properties/json/JSONArray.java | 0 .../shared/properties/json/JSONBoolean.java | 0 .../shared/properties/json/JSONEncodable.java | 0 .../shared/properties/json/JSONNumber.java | 0 .../shared/properties/json/JSONObject.java | 0 .../shared/properties/json/JSONParser.java | 0 .../shared/properties/json/JSONString.java | 0 .../shared/properties/json/JSONUtil.java | 0 .../shared/properties/json/JSONValue.java | 0 .../shared/rpc/AdminInterfaceException.java | 0 .../shared/rpc/BlocksTruncatedException.java | 0 .../shared/rpc/GetMotdService.java | 0 .../shared/rpc/GetMotdServiceAsync.java | 0 .../shared/rpc/InvalidSessionException.java | 0 .../google/appinventor/shared/rpc/Motd.java | 0 .../appinventor/shared/rpc/MotdProvider.java | 0 .../google/appinventor/shared/rpc/Nonce.java | 0 .../appinventor/shared/rpc/RpcResult.java | 0 .../appinventor/shared/rpc/ServerLayout.java | 0 .../shared/rpc/UploadResponse.java | 0 .../shared/rpc/admin/AdminInfoService.java | 0 .../rpc/admin/AdminInfoServiceAsync.java | 0 .../shared/rpc/admin/AdminUser.java | 0 .../shared/rpc/component/Component.java | 0 .../component/ComponentImportResponse.java | 0 .../rpc/component/ComponentService.java | 0 .../rpc/component/ComponentServiceAsync.java | 0 .../rpc/components/FirebaseAuthService.java | 0 .../components/FirebaseAuthServiceAsync.java | 0 .../rpc/project/ChecksumedFileException.java | 0 .../rpc/project/ChecksumedLoadFile.java | 0 .../shared/rpc/project/FileDescriptor.java | 0 .../project/FileDescriptorWithContent.java | 0 .../shared/rpc/project/FileNode.java | 0 .../shared/rpc/project/FolderNode.java | 0 .../shared/rpc/project/HasAssetsFolder.java | 0 .../rpc/project/NewProjectParameters.java | 0 .../shared/rpc/project/PackageNode.java | 0 .../shared/rpc/project/Project.java | 0 .../shared/rpc/project/ProjectNode.java | 0 .../shared/rpc/project/ProjectRootNode.java | 0 .../shared/rpc/project/ProjectService.java | 0 .../rpc/project/ProjectServiceAsync.java | 0 .../shared/rpc/project/ProjectSourceZip.java | 0 .../shared/rpc/project/RawFile.java | 0 .../shared/rpc/project/SourceFolderNode.java | 0 .../shared/rpc/project/SourceNode.java | 0 .../shared/rpc/project/TextFile.java | 0 .../shared/rpc/project/UserProject.java | 0 .../youngandroid/HasComponentsFolder.java | 0 .../NewYoungAndroidProjectParameters.java | 0 .../youngandroid/YoungAndroidAssetNode.java | 0 .../YoungAndroidAssetsFolder.java | 0 .../youngandroid/YoungAndroidBlocksNode.java | 0 .../YoungAndroidComponentNode.java | 0 .../YoungAndroidComponentsFolder.java | 0 .../youngandroid/YoungAndroidFormNode.java | 0 .../youngandroid/YoungAndroidPackageNode.java | 0 .../youngandroid/YoungAndroidProjectNode.java | 0 .../YoungAndroidSourceFolderNode.java | 0 .../youngandroid/YoungAndroidSourceNode.java | 0 .../youngandroid/YoungAndroidYailNode.java | 0 .../rpc/tokenauth/TokenAuthService.java | 0 .../rpc/tokenauth/TokenAuthServiceAsync.java | 0 .../appinventor/shared/rpc/user/Config.java | 0 .../shared/rpc/user/SplashConfig.java | 0 .../appinventor/shared/rpc/user/User.java | 0 .../shared/rpc/user/UserInfoProvider.java | 0 .../shared/rpc/user/UserInfoService.java | 0 .../shared/rpc/user/UserInfoServiceAsync.java | 0 .../appinventor/shared/settings/Settings.java | 0 .../shared/settings/SettingsConstants.java | 0 .../simple/ComponentDatabaseInterface.java | 0 .../shared/storage/StorageUtil.java | 0 .../shared/util/AddressFormatException.java | 0 .../appinventor/shared/util/Base58Util.java | 0 .../appinventor/shared/util/Base64Util.java | 0 .../YoungAndroidSourceAnalyzer.java | 0 .../shared/properties/json/JSONUtilTest.java | 0 .../appinventor/shared/rpc/RpcResultTest.java | 0 .../shared/rpc/UploadResponseTest.java | 0 .../YoungAndroidSourceNodeTest.java | 0 .../shared/settings/SettingsTest.java | 0 .../shared/storage/StorageUtilTest.java | 0 .../YoungAndroidSourceAnalyzerTest.java | 0 .../war/WEB-INF/appengine-web.xml | 0 .../war/WEB-INF/log4j.properties | 0 .../war/WEB-INF/logging.properties | 0 .../war/WEB-INF/queue.xml | 0 .../war/WEB-INF/web.xml | 0 .../war/Ya_tos_form.html | 0 .../war/favicon.ico | Bin .../war/index.html | 0 .../war/login.jsp | 0 .../war/static/css/DarkTheme.css | 0 .../war/static/css/Ya.css | 0 .../war/static/css/all.css | 0 .../war/static/css/android_holo.css | 0 .../war/static/css/android_material.css | 0 .../war/static/css/bootstrap.min.css | 0 .../war/static/css/fonts.css | 0 .../war/static/css/gwt.css | 0 .../war/static/css/iOS.css | 0 .../war/static/css/mit_app_inventor.css | 0 .../war/static/fonts/Helvetica.ttf | Bin .../war/static/fonts/OpenDyslexic-Bold.otf | Bin .../war/static/fonts/OpenDyslexic-Regular.otf | Bin .../war/static/fonts/Roboto-Black.ttf | Bin .../war/static/fonts/Roboto-BlackItalic.ttf | Bin .../war/static/fonts/Roboto-Bold.ttf | Bin .../war/static/fonts/Roboto-BoldCondensed.ttf | Bin .../fonts/Roboto-BoldCondensedItalic.ttf | Bin .../war/static/fonts/Roboto-BoldItalic.ttf | Bin .../war/static/fonts/Roboto-Condensed.ttf | Bin .../static/fonts/Roboto-CondensedItalic.ttf | Bin .../war/static/fonts/Roboto-Italic.ttf | Bin .../war/static/fonts/Roboto-Light.ttf | Bin .../war/static/fonts/Roboto-LightItalic.ttf | Bin .../war/static/fonts/Roboto-Medium.ttf | Bin .../war/static/fonts/Roboto-MediumItalic.ttf | Bin .../war/static/fonts/Roboto-Regular.ttf | Bin .../war/static/fonts/Roboto-Thin.ttf | Bin .../war/static/fonts/Roboto-ThinItalic.ttf | Bin .../war/static/images/background.gif | Bin .../war/static/images/cc3.png | Bin .../war/static/images/codi_long.png | Bin .../war/static/images/corner.png | Bin .../war/static/images/corner_ie6.png | Bin .../war/static/images/hborder.png | Bin .../war/static/images/hborder_ie6.png | Bin .../war/static/images/iOSLandscapeMonitor.png | Bin .../war/static/images/iOSLandscapeTablet.png | Bin .../war/static/images/iOSPortraitMonitor.png | Bin .../war/static/images/iOSPortraitTablet.png | Bin .../war/static/images/iPhoneXLandscape.png | Bin .../war/static/images/iPhoneXPotrait.png | Bin .../images/ie6/corner_dialog_topleft.png | Bin .../images/ie6/corner_dialog_topright.png | Bin .../static/images/ie6/hborder_blue_shadow.png | Bin .../static/images/ie6/hborder_gray_shadow.png | Bin .../static/images/ie6/vborder_blue_shadow.png | Bin .../static/images/ie6/vborder_gray_shadow.png | Bin .../war/static/images/languages.svg | 0 .../war/static/images/leftArrow.png | Bin .../war/static/images/login-app-inventor.jpg | Bin .../war/static/images/logo.png | Bin .../war/static/images/logo2.png | Bin .../war/static/images/logo_16.png | Bin .../war/static/images/logo_experimental.png | Bin .../war/static/images/logo_ya.png | Bin .../static/images/logo_ya_experimental.png | Bin .../war/static/images/myprojects.png | Bin .../war/static/images/mzl.png | Bin .../static/images/navigationbarLandscape.png | Bin .../static/images/navigationbarPortrait.png | Bin .../war/static/images/numComment.png | Bin .../war/static/images/numDownload.png | Bin .../war/static/images/numLike.png | Bin .../war/static/images/numLikeHollow.png | Bin .../war/static/images/numView.png | Bin .../war/static/images/person.png | Bin .../war/static/images/phoneLandscape.png | Bin .../static/images/phoneLandscapeMonitor.png | Bin .../static/images/phoneLandscapeTablet.png | Bin .../war/static/images/phonePortrait.png | Bin .../static/images/phonePortraitMonitor.png | Bin .../war/static/images/phonePortraitTablet.png | Bin .../war/static/images/rightArrow.png | Bin .../war/static/images/rpcMessageCorners.png | Bin .../war/static/images/splitPanelThumb.png | Bin .../war/static/images/squairy_light.png | Bin .../war/static/images/toolbarBG.png | Bin .../war/static/images/vborder.png | Bin .../war/static/images/vborder_ie6.png | Bin .../war/static/images/watermark.png | Bin .../war/static/js/bootstrap.min.js | 0 .../war/static/js/jquery-3.3.1.slim.min.js | 0 .../war/static/js/popper.min.js | 0 .../war/static/js/tos.js | 0 .../war/static/js/widgets.js | 0 .../templates/DIYBookClub/DIYBookClub.json | 0 .../war/templates/DIYBookClub/DIYBookClub.zip | Bin .../war/templates/DIYBookClub/screenshot.png | Bin .../war/templates/DIYBookClub/thumbnail.png | Bin .../templates/DontGetFaked/DontGetFaked.json | 0 .../templates/DontGetFaked/DontGetFaked.zip | Bin .../war/templates/DontGetFaked/screenshot.png | Bin .../war/templates/DontGetFaked/thumbnail.png | Bin .../war/templates/HelloPurr/HelloPurr.json | 0 .../war/templates/HelloPurr/HelloPurr.zip | Bin .../war/templates/HelloPurr/index.html | 0 .../war/templates/HelloPurr/screenshot.png | Bin .../war/templates/HelloPurr/thumbnail.png | Bin .../HelloPurrStarter/HelloPurrStarter.json | 0 .../HelloPurrStarter/HelloPurrStarter.zip | Bin .../MapTheMovement/MapTheMovement.json | 0 .../MapTheMovement/MapTheMovement.zip | Bin .../templates/MapTheMovement/screenshot.png | Bin .../templates/MapTheMovement/thumbnail.png | Bin .../war/templates/MoodRing/MoodRing.json | 0 .../war/templates/MoodRing/MoodRing.zip | Bin .../war/templates/MoodRing/screenshot.png | Bin .../war/templates/MoodRing/thumbnail.png | Bin .../war/templates/MyToDoList/MyToDoList.json | 0 .../war/templates/MyToDoList/MyToDoList.zip | Bin .../war/templates/MyToDoList/screenshot.png | Bin .../war/templates/MyToDoList/thumbnail.png | Bin .../SnapchatRemix/SnapchatRemix.json | 0 .../templates/SnapchatRemix/SnapchatRemix.zip | Bin .../templates/SnapchatRemix/screenshot.png | Bin .../war/templates/SnapchatRemix/thumbnail.png | Bin .../templates/SoundLibrary/SoundLibrary.json | 0 .../templates/SoundLibrary/SoundLibrary.zip | Bin .../war/templates/SoundLibrary/screenshot.png | Bin .../war/templates/SoundLibrary/thumbnail.png | Bin .../templates/TranslateApp/TranslateApp.json | 0 .../templates/TranslateApp/TranslateApp.zip | Bin .../war/templates/TranslateApp/screenshot.png | Bin .../war/templates/TranslateApp/thumbnail.png | Bin appinventor/appengine/build.gradle.kts | 3 - appinventor/settings.gradle.kts | 13 +- 870 files changed, 1736 insertions(+), 1685 deletions(-) create mode 100644 appinventor/appengine-backend/build.gradle.kts rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/AdminInfoServiceImpl.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/BlobUpgradeServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/BuildOutputServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/ComponentServiceImpl.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/CrashReport.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/DownloadServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/FeedbackServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/FileExporter.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/FileExporterImpl.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/FileImporter.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/FileImporterException.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/FileImporterImpl.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/GalleryEmail.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/GetMotdServiceImpl.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/LocalUser.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/LoginServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/LogoutServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/OdeAuthFilter.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/OdeRemoteServiceServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/OdeServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/ProjectServiceImpl.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/ReceiveBuildServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/RestServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/Server.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/TosServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/UploadServlet.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/UserInfoServiceImpl.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/Whitelist.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/components/FirebaseAuthServiceImpl.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/cookieauth/CookieAuth.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/cookieauth/cookie.proto (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/encryption/EncryptionException.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/encryption/EncryptionStrategy.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/encryption/Encryptor.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/encryption/KeyczarEncryptor.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/encryption/NopEncryptor.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/flags/Flag.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/flags/IllegalFlagValueException.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/loginmessages_en.properties (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/loginmessages_lt.properties (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/loginmessages_pt.properties (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/loginmessages_zh_cn.properties (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/project/CommonProjectService.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/project/utils/Security.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/project/utils/TempFiles.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/project/youngandroid/GalleryProtobuf.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/project/youngandroid/GalleryToken.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectService.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/project/youngandroid/YoungAndroidSettingsBuilder.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/project/youngandroid/gallerytoken.proto (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/properties/json/ServerJsonArray.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/properties/json/ServerJsonBoolean.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/properties/json/ServerJsonNumber.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/properties/json/ServerJsonObject.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/properties/json/ServerJsonParser.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/properties/json/ServerJsonString.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/properties/json/ServerJsonValue.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/storage/BlobReadException.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/storage/BlobWriteException.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/storage/ObjectifyException.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/storage/ObjectifyStorageIo.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/storage/StorageIo.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/storage/StorageIoInstanceHolder.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/storage/StoredData.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/storage/UnauthorizedAccessException.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/storage/UserAlreadyExistsException.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/tokenauth/CloudDBTokenAuth.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/tokenauth/TokenAuthServiceImpl.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/tokenauth/TranslatorToken.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/tokenauth/clouddb.proto (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/tokenauth/tr.proto (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/tokens/Token.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/tokens/TokenException.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/tokens/TokenProto.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/tokens/token.proto (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/util/BuildData.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/util/CacheHeaders.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/util/CacheHeadersImpl.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/util/CsvParser.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/util/FileUtil.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/util/ModifiedHeaders.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/util/PasswordHash.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/util/UriBuilder.java (100%) rename appinventor/{appengine/src => appengine-backend/src/main/java}/com/google/appinventor/server/util/VersionString.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/Bad-Extension.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/BarOld.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/Buggy.zip (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/ComponentServiceTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/Corrupt-Extension.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/CorruptExtensionTestMissingDescriptors.aia (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/DownloadServletTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/EmptyZip.zip (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/Extension-Bundle-With-2-Extensions.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/Extension-Bundle.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/FCQN-Single-Extension.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/FileExporterImplTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/FileImporterImplTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/FooBar.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/FooOld.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/LocalDatastoreTestCase.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/NotAValidProjectArchive.zip (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/OdeAuthFilterTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/OldExtensionTest.aia (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/Project1.zip (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/ProjectServiceTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/ProjectWithAssets.zip (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/Transition-Extension-Bundle.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/Transition-Extension-With-Files-Reversed.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/WEB-INF/whitelist (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/WhitelistTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/encryption/KeyczarEncryptorTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/flags/FlagTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/package.Component.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/project/utils/SecurityTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/project/utils/TempFilesTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectServiceTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/storage/ObjectifyStorageIoTest.java (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/test.EmptyComponentDescriptor.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/test.Extension1.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/test.Extension3.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/test.Extension4.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/test.NoComponentDescriptor.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/test2.Extension2.aix (100%) rename appinventor/{appengine/tests => appengine-backend/src/test/java}/com/google/appinventor/server/util/VersionStringTest.java (100%) rename appinventor/{appengine/src/com/google/appinventor => appengine-frontend}/YaClient-dev.gwt.xml (100%) rename appinventor/{appengine/src/com/google/appinventor => appengine-frontend}/YaClient.gwt.xml (100%) create mode 100644 appinventor/appengine-frontend/build.gradle.kts rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/AdminUserList.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/AssetManager.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/BugReport.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/ConnectProgressBar.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/DesignToolbar.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/ErrorReporter.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/ExtendedServiceProxy.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/Images.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/LoadGalleryProject.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/Log.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/Logger.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/MotdFetcher.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/MultiRegistry.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/Ode.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeAsyncCallback.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeBoxRegistry.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages.java (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_ca.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_de.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_es_ES.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_fr_FR.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_hu.properties (98%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_hy.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_it_IT.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_ko_KR.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_lt.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_nl.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_pl.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_pt.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_pt_BR.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_ru.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_sv.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_tr.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_zh_CN.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/OdeMessages_zh_TW.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/ProjectEditorRegistry.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/Registry.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/RpcListener.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/RpcListenerAdapter.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/RpcStatusPopup.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/StatusPanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/SysOutLogger.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/TopPanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/TopToolbar.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/admin/AdminComparators.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/AdminUserListBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/AssetListBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/BlockSelectorBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/MessagesOutputBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/MotdBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/OdeLogBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/PaletteBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/ProjectListBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/PropertiesBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/SourceStructureBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/ViewerBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/boxes/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/EditorManager.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/FileEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/ProjectEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/ProjectEditorFactory.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/ComponentDatabase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/ComponentNotFoundException.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/SimpleComponentDatabase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/SimpleEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/SimpleNonVisibleComponentsPanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/SimpleVisibleComponentsPanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/DataFileChangeListener.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/DesignPreviewChangeListener.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/FormChangeListener.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/LayoutInfo.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockAreaChartDataModel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockAreaChartView.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockAxisChartView.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockBall.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockBarChartDataModel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockBarChartView.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockButton.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockButtonBase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockCanvas.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockCanvasLayout.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockChart.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockChartData.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockChartData2D.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockChartDataModel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockChartLayout.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockChartView.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockCheckBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockCircle.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockCloudDB.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockComponent.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockComponentsUtil.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockContactPicker.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockContainer.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockDataFile.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockDatePicker.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockEmailPicker.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockFeatureCollection.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockFeatureCollectionLayout.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockFirebaseDB.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockForm.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockFormHelper.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockFormLayout.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockFusionTablesControl.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockHVArrangement.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockHVArrangementHelper.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockHVLayout.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockHVLayoutBase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockHorizontalArrangement.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockImage.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockImageBase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockImagePicker.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockImageSprite.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockLabel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockLayout.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockLineChartBaseDataModel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockLineChartDataModel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockLineChartView.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockLineChartViewBase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockLineString.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockListPicker.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockListView.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockMap.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockMapFeature.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockMapFeatureBase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockMapFeatureBaseWithFill.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockMapLayout.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockMarker.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockNonVisibleComponent.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockPasswordTextBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockPhoneNumberPicker.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockPieChartDataModel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockPieChartView.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockPointChartDataModel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockPointChartView.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockPolygon.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockPolygonBase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockRadioButton.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockRectangle.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockScatterChartDataModel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockScatterChartView.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockScrollHorizontalArrangement.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockScrollVerticalArrangement.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockSlider.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockSpinner.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockSpreadsheet.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockSprite.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockSwitch.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockTableArrangement.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockTableLayout.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockTextBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockTextBoxBase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockTimePicker.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockToggleBase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockTranslator.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockVerticalArrangement.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockVideoPlayer.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockVisibleComponent.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockWebViewer.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/MockWrapper.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/utils/PropertiesUtil.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/components/utils/SVGPanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/palette/AbstractPaletteItemWidget.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/palette/ComponentHelpWidget.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/palette/ComponentRemoveWidget.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/palette/DropTargetProvider.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/palette/SimpleComponentDescriptor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/palette/SimplePaletteItem.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/palette/SimplePalettePanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/simple/palette/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/BlockDrawerSelectionListener.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/BlocklyPanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/LoadBlocksException.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/TutorialPanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/YaBlocksEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/YaFormEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/YaProjectEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/YailGenerationException.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/events/EventHelper.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/i18n/BlocklyMsg.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/i18n/BlocklyTranslationGenerator.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/palette/LegoPaletteHelper.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/palette/OrderedPaletteHelper.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/palette/PaletteHelper.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/palette/YoungAndroidPalettePanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/palette/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/ListWithNone.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAccelerometerSensitivityChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAlignmentChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAssetSelectorPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidBooleanPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidButtonShapeChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartLineTypeChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartPointShapeChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartTypeChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidColorChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidComponentSelectorPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidDataColumnSelectorProperty.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidDefaultURLPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFileScopePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFloatRangePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFontTypefaceChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidGeoJSONPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidGeographicPointPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidHorizontalAlignmentChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidIntegerRangePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3ColorSensorModeChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3GyroSensorModeChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3SensorPortChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3UltrasonicSensorModeChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoNxtSensorPortChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLengthPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidListViewAddDataPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidListViewLayoutChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidMapScaleUnitsPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidMapTypePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidNavigationMethodChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidRecyclerViewOrientationPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidScreenAnimationChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidScreenOrientationChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSensorDistIntervalChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSensorTimeIntervalChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSizingChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidTextReceivingPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidThemeChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidToastLengthChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidVerticalAlignmentChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/editor/youngandroid/properties/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/SourceStructureExplorer.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/SourceStructureExplorerItem.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/AddFormCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/BuildCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/ChainableCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/CommandRegistry.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/CopyYoungAndroidProjectCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/DeleteFileCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/DownloadFileCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/DownloadProjectOutputCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/EnsurePhoneConnectedCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/GenerateYailCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/MiniProgressBar.java (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/PreviewFileCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/ProjectNodeCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/SaveAllEditorsCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/SaveScreenCheckpointCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/ShowBarcodeCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/ShowProgressBarCommand.java (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/WaitForBuildResultCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/WarningDialogCommand.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/commands/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBox.ui.xml (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_ca.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_en.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_hy.properties (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/dialogs/ProgressBarDialogBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/project/ComponentDatabaseChangeListener.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/project/Project.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/project/ProjectChangeAdapter.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/project/ProjectChangeListener.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/project/ProjectComparators.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/project/ProjectManager.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/project/ProjectManagerEventAdapter.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/project/ProjectManagerEventListener.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/project/ProjectNodeContextMenu.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/project/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/youngandroid/AssetList.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/youngandroid/GalleryImages.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/youngandroid/ProjectList.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/youngandroid/ProjectToolbar.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/youngandroid/androidIcon.png (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/youngandroid/genericApp.png (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/explorer/youngandroid/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/languages.json (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/output/MessagesOutput.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/output/MotdUi.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/output/OdeLog.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/package-info.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/properties/BadPropertyEditorException.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/properties/Properties.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/properties/Property.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/properties/json/ClientJsonArray.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/properties/json/ClientJsonBoolean.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/properties/json/ClientJsonNumber.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/properties/json/ClientJsonObject.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/properties/json/ClientJsonParser.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/properties/json/ClientJsonString.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/properties/json/ClientJsonValue.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/settings/CommonSettings.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/settings/Settings.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/settings/SettingsAccessProvider.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/settings/project/ProjectSettings.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/settings/project/YoungAndroidSettings.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/settings/user/BlocksSettings.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/settings/user/GeneralSettings.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/settings/user/SplashSettings.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/settings/user/UserSettings.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/settings/user/YoungAndroidSettings.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/tracking/Tracking.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/utils/Downloader.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/utils/FocusImplSafari.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/utils/FocusImplStandard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/utils/HTML5DragDrop.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/utils/MessageDialog.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/utils/PZAwarePositionCallback.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/utils/Uploader.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/utils/Urls.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/utils/html5dnd.js (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/ActionDropDown.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/ClonedWidget.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/ContextMenu.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/DropDownButton.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/ExpiredServiceOverlay.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/ExpiredServiceOverlay.ui.xml (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/Icon.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/LabeledTextBox.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/TextButton.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/Toolbar.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/Validator.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/boxes/Box.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/boxes/BoxRegistry.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/boxes/ColumnLayout.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/boxes/HandlerPanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/boxes/Layout.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/boxes/LayoutChangeListener.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/boxes/WorkAreaPanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/dnd/DragSource.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/dnd/DragSourcePanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/dnd/DragSourceSupport.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/dnd/DropTarget.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/AdditionalChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/BooleanPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/ChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/ColorChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/CountryChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/EditableProperties.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/EditableProperty.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/FloatPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/IntegerPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/LanguageChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/NonNegativeFloatPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/NonNegativeIntegerPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/PropertiesPanel.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/PropertyChangeListener.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/PropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/ScalingChoicePropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/StringPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/SubsetJSONPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/TextAreaPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/TextPropertyEditor.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/widgets/properties/TextPropertyEditorBase.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/ComponentImportWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/ComponentRenameWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/ComponentUploadWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/DownloadUserSourceWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/FileUploadWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/InputTemplateUrlWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/KeystoreUploadWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/NewProjectWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/NewUrlDialogCallback.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/ProjectUploadWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/RequestNewProjectNameWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/RequestProjectNewNameInterface.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/TemplateUploadWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/UrlImportWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/Wizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/wizards/youngandroid/NewYoungAndroidProjectWizard.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/youngandroid/TextValidators.java (100%) rename appinventor/{appengine/src => appengine-frontend/src/main/java}/com/google/appinventor/client/youngandroid/YoungAndroidFormUpgrader.java (100%) rename appinventor/{appengine/tests => appengine-frontend/src/test/java}/com/google/appinventor/client/MultiRegistryTest.java (100%) rename appinventor/{appengine/tests => appengine-frontend/src/test/java}/com/google/appinventor/client/OdeTest.java (100%) rename appinventor/{appengine/tests => appengine-frontend/src/test/java}/com/google/appinventor/client/RegistryTest.java (100%) rename appinventor/{appengine/tests => appengine-frontend/src/test/java}/com/google/appinventor/client/editor/simple/ComponentDatabaseTest.java (100%) rename appinventor/{appengine/tests => appengine-frontend/src/test/java}/com/google/appinventor/client/editor/youngandroid/properties/ListWithNoneTest.java (100%) rename appinventor/{appengine/tests => appengine-frontend/src/test/java}/com/google/appinventor/client/explorer/project/ProjectComparatorsTest.java (100%) rename appinventor/{appengine/tests => appengine-frontend/src/test/java}/com/google/appinventor/client/youngandroid/TextValidatorsTest.java (100%) create mode 100644 appinventor/appengine-shared/build.gradle.kts rename appinventor/{appengine => appengine-shared}/build.xml (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/YRLogo.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/accelerometersensor.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/activityStarter.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/appinvlogo-32.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/arduino.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/ball.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/barcodeScanner.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/barometer.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/bluetooth.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/boxClose.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/boxMenu.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/boxMinimize.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/boxRestore.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/button.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/camcorder.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/camera.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/canvas.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/chart.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/chartData.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/checkbox.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/circle.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/clock.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/close.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/cloudDB.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/codi_vert.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/colors.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/contactPicker.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/control.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/corner.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/corner_green.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/dataFile.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/datePicker.png (100%) create mode 100644 appinventor/appengine-shared/src/main/java/com/google/appinventor/images/delete.png rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/dictionaries.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/emailPicker.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/extension.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/featurecollection.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/file.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/find.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/firebaseDB.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/form.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/fusiontables.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/gameClient.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/get-app.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/graydient.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/groupGame.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/gyroscopesensor.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/help.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/horizontal.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/hygrometer.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/iOSBookmarkBlack.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/iOSBookmarkWhite.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/iPadBlackFB.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/iPadLeftWhiteFB.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/iPadRightBlack.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/iPadRightWhite.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/iPhoneLeftBlack.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/iPhoneLeftWhiteFB.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/iPhoneRightBlack.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/iPhoneRightWhite.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/image.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/imagePicker.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/imageSprite.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/label.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/legoMindstormsEv3.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/legoMindstormsNxt.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/lightsensor.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/linestring.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/listPicker.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/listView.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/listbox.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/lists.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/locationSensor.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/logger.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/logic.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/logo.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/magneticSensor.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/map.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/marker.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/math.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/mediaIcon_audio.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/mediaIcon_img.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/mediaIcon_video.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/mediastore.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/navigation.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/nearfield.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/notifier.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/orientationsensor.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/passwordtextbox.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/pedometer.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/phoneCall.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/phoneNumberPicker.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/phonebar.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/phonebarAndroidMaterial.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/phoneip.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/player.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/polygon.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/procedures.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/progressbar.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/proximitysensor.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/purr.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/radiobutton.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/rectangle.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/recyclerView.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/sharing.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/sky.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/slider.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/sound.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/soundEffect.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/soundRecorder.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/speechRecognizer.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/spin_16.gif (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/spinner.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/spreadsheet.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/switch.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/table.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/talkToMeLogo.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/text.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/textToSpeech.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/textbox.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/texting.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/thermometer.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/timePicker.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/tinyDB.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/tinyWebDB.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/translator.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/twitter.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/variables.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/vertical.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/videoPlayer.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/voting.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/web.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/webDB.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/webviewer.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/webviewerbig.png (100%) mode change 100755 => 100644 rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/wilson.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/images/yandex.png (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/rebind/ExtendedServiceProxyGenerator.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/properties/json/JSONArray.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/properties/json/JSONBoolean.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/properties/json/JSONEncodable.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/properties/json/JSONNumber.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/properties/json/JSONObject.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/properties/json/JSONParser.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/properties/json/JSONString.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/properties/json/JSONUtil.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/properties/json/JSONValue.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/AdminInterfaceException.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/BlocksTruncatedException.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/GetMotdService.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/GetMotdServiceAsync.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/InvalidSessionException.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/Motd.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/MotdProvider.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/Nonce.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/RpcResult.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/ServerLayout.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/UploadResponse.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/admin/AdminInfoService.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/admin/AdminInfoServiceAsync.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/admin/AdminUser.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/component/Component.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/component/ComponentImportResponse.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/component/ComponentService.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/component/ComponentServiceAsync.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/components/FirebaseAuthService.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/components/FirebaseAuthServiceAsync.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/ChecksumedFileException.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/ChecksumedLoadFile.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/FileDescriptor.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/FileDescriptorWithContent.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/FileNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/FolderNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/HasAssetsFolder.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/NewProjectParameters.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/PackageNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/Project.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/ProjectNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/ProjectRootNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/ProjectService.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/ProjectServiceAsync.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/ProjectSourceZip.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/RawFile.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/SourceFolderNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/SourceNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/TextFile.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/UserProject.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/HasComponentsFolder.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/NewYoungAndroidProjectParameters.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidAssetNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidAssetsFolder.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidBlocksNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidComponentNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidComponentsFolder.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidFormNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidPackageNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidProjectNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidSourceFolderNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidSourceNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidYailNode.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/tokenauth/TokenAuthService.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/tokenauth/TokenAuthServiceAsync.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/user/Config.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/user/SplashConfig.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/user/User.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/user/UserInfoProvider.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/user/UserInfoService.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/rpc/user/UserInfoServiceAsync.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/settings/Settings.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/settings/SettingsConstants.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/simple/ComponentDatabaseInterface.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/storage/StorageUtil.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/util/AddressFormatException.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/util/Base58Util.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/util/Base64Util.java (100%) rename appinventor/{appengine/src => appengine-shared/src/main/java}/com/google/appinventor/shared/youngandroid/YoungAndroidSourceAnalyzer.java (100%) rename appinventor/{appengine/tests => appengine-shared/src/test/java}/com/google/appinventor/shared/properties/json/JSONUtilTest.java (100%) rename appinventor/{appengine/tests => appengine-shared/src/test/java}/com/google/appinventor/shared/rpc/RpcResultTest.java (100%) rename appinventor/{appengine/tests => appengine-shared/src/test/java}/com/google/appinventor/shared/rpc/UploadResponseTest.java (100%) rename appinventor/{appengine/tests => appengine-shared/src/test/java}/com/google/appinventor/shared/rpc/project/youngandroid/YoungAndroidSourceNodeTest.java (100%) rename appinventor/{appengine/tests => appengine-shared/src/test/java}/com/google/appinventor/shared/settings/SettingsTest.java (100%) rename appinventor/{appengine/tests => appengine-shared/src/test/java}/com/google/appinventor/shared/storage/StorageUtilTest.java (100%) rename appinventor/{appengine/tests => appengine-shared/src/test/java}/com/google/appinventor/shared/youngandroid/YoungAndroidSourceAnalyzerTest.java (100%) rename appinventor/{appengine => appengine-shared}/war/WEB-INF/appengine-web.xml (100%) rename appinventor/{appengine => appengine-shared}/war/WEB-INF/log4j.properties (100%) rename appinventor/{appengine => appengine-shared}/war/WEB-INF/logging.properties (100%) rename appinventor/{appengine => appengine-shared}/war/WEB-INF/queue.xml (100%) rename appinventor/{appengine => appengine-shared}/war/WEB-INF/web.xml (100%) rename appinventor/{appengine => appengine-shared}/war/Ya_tos_form.html (100%) rename appinventor/{appengine => appengine-shared}/war/favicon.ico (100%) rename appinventor/{appengine => appengine-shared}/war/index.html (100%) rename appinventor/{appengine => appengine-shared}/war/login.jsp (100%) rename appinventor/{appengine => appengine-shared}/war/static/css/DarkTheme.css (100%) rename appinventor/{appengine => appengine-shared}/war/static/css/Ya.css (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/css/all.css (100%) rename appinventor/{appengine => appengine-shared}/war/static/css/android_holo.css (100%) rename appinventor/{appengine => appengine-shared}/war/static/css/android_material.css (100%) rename appinventor/{appengine => appengine-shared}/war/static/css/bootstrap.min.css (100%) rename appinventor/{appengine => appengine-shared}/war/static/css/fonts.css (100%) rename appinventor/{appengine => appengine-shared}/war/static/css/gwt.css (100%) rename appinventor/{appengine => appengine-shared}/war/static/css/iOS.css (100%) rename appinventor/{appengine => appengine-shared}/war/static/css/mit_app_inventor.css (100%) rename appinventor/{appengine => appengine-shared}/war/static/fonts/Helvetica.ttf (100%) rename appinventor/{appengine => appengine-shared}/war/static/fonts/OpenDyslexic-Bold.otf (100%) rename appinventor/{appengine => appengine-shared}/war/static/fonts/OpenDyslexic-Regular.otf (100%) rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-Black.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-BlackItalic.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-Bold.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-BoldCondensed.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-BoldCondensedItalic.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-BoldItalic.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-Condensed.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-CondensedItalic.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-Italic.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-Light.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-LightItalic.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-Medium.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-MediumItalic.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-Regular.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-Thin.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/fonts/Roboto-ThinItalic.ttf (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/images/background.gif (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/cc3.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/codi_long.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/corner.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/corner_ie6.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/hborder.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/hborder_ie6.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/iOSLandscapeMonitor.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/iOSLandscapeTablet.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/iOSPortraitMonitor.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/iOSPortraitTablet.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/iPhoneXLandscape.png (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/images/iPhoneXPotrait.png (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/images/ie6/corner_dialog_topleft.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/ie6/corner_dialog_topright.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/ie6/hborder_blue_shadow.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/ie6/hborder_gray_shadow.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/ie6/vborder_blue_shadow.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/ie6/vborder_gray_shadow.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/languages.svg (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/leftArrow.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/login-app-inventor.jpg (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/logo.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/logo2.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/logo_16.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/logo_experimental.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/logo_ya.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/logo_ya_experimental.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/myprojects.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/mzl.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/navigationbarLandscape.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/navigationbarPortrait.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/numComment.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/numDownload.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/numLike.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/numLikeHollow.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/numView.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/person.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/phoneLandscape.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/phoneLandscapeMonitor.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/phoneLandscapeTablet.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/phonePortrait.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/phonePortraitMonitor.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/phonePortraitTablet.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/rightArrow.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/rpcMessageCorners.png (100%) mode change 100755 => 100644 rename appinventor/{appengine => appengine-shared}/war/static/images/splitPanelThumb.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/squairy_light.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/toolbarBG.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/vborder.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/vborder_ie6.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/images/watermark.png (100%) rename appinventor/{appengine => appengine-shared}/war/static/js/bootstrap.min.js (100%) rename appinventor/{appengine => appengine-shared}/war/static/js/jquery-3.3.1.slim.min.js (100%) rename appinventor/{appengine => appengine-shared}/war/static/js/popper.min.js (100%) rename appinventor/{appengine => appengine-shared}/war/static/js/tos.js (100%) rename appinventor/{appengine => appengine-shared}/war/static/js/widgets.js (100%) rename appinventor/{appengine => appengine-shared}/war/templates/DIYBookClub/DIYBookClub.json (100%) rename appinventor/{appengine => appengine-shared}/war/templates/DIYBookClub/DIYBookClub.zip (100%) rename appinventor/{appengine => appengine-shared}/war/templates/DIYBookClub/screenshot.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/DIYBookClub/thumbnail.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/DontGetFaked/DontGetFaked.json (100%) rename appinventor/{appengine => appengine-shared}/war/templates/DontGetFaked/DontGetFaked.zip (100%) rename appinventor/{appengine => appengine-shared}/war/templates/DontGetFaked/screenshot.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/DontGetFaked/thumbnail.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/HelloPurr/HelloPurr.json (100%) rename appinventor/{appengine => appengine-shared}/war/templates/HelloPurr/HelloPurr.zip (100%) rename appinventor/{appengine => appengine-shared}/war/templates/HelloPurr/index.html (100%) rename appinventor/{appengine => appengine-shared}/war/templates/HelloPurr/screenshot.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/HelloPurr/thumbnail.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/HelloPurrStarter/HelloPurrStarter.json (100%) rename appinventor/{appengine => appengine-shared}/war/templates/HelloPurrStarter/HelloPurrStarter.zip (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MapTheMovement/MapTheMovement.json (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MapTheMovement/MapTheMovement.zip (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MapTheMovement/screenshot.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MapTheMovement/thumbnail.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MoodRing/MoodRing.json (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MoodRing/MoodRing.zip (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MoodRing/screenshot.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MoodRing/thumbnail.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MyToDoList/MyToDoList.json (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MyToDoList/MyToDoList.zip (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MyToDoList/screenshot.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/MyToDoList/thumbnail.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/SnapchatRemix/SnapchatRemix.json (100%) rename appinventor/{appengine => appengine-shared}/war/templates/SnapchatRemix/SnapchatRemix.zip (100%) rename appinventor/{appengine => appengine-shared}/war/templates/SnapchatRemix/screenshot.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/SnapchatRemix/thumbnail.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/SoundLibrary/SoundLibrary.json (100%) rename appinventor/{appengine => appengine-shared}/war/templates/SoundLibrary/SoundLibrary.zip (100%) rename appinventor/{appengine => appengine-shared}/war/templates/SoundLibrary/screenshot.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/SoundLibrary/thumbnail.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/TranslateApp/TranslateApp.json (100%) rename appinventor/{appengine => appengine-shared}/war/templates/TranslateApp/TranslateApp.zip (100%) rename appinventor/{appengine => appengine-shared}/war/templates/TranslateApp/screenshot.png (100%) rename appinventor/{appengine => appengine-shared}/war/templates/TranslateApp/thumbnail.png (100%) delete mode 100644 appinventor/appengine/build.gradle.kts diff --git a/appinventor/appengine-backend/build.gradle.kts b/appinventor/appengine-backend/build.gradle.kts new file mode 100644 index 00000000000..621ac254778 --- /dev/null +++ b/appinventor/appengine-backend/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + java + war + id("com.google.cloud.tools.appengine") version "2.4.4" +} + +group = "com.google.appinventor" +version = "unspecified" + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} + +appengine { + deploy { + version = "1" + projectId = "your GCP project ID" + } + run { + + } +} + +dependencies { +} diff --git a/appinventor/appengine/src/com/google/appinventor/server/AdminInfoServiceImpl.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/AdminInfoServiceImpl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/AdminInfoServiceImpl.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/AdminInfoServiceImpl.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/BlobUpgradeServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/BlobUpgradeServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/BlobUpgradeServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/BlobUpgradeServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/BuildOutputServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/BuildOutputServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/BuildOutputServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/BuildOutputServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/ComponentServiceImpl.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/ComponentServiceImpl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/ComponentServiceImpl.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/ComponentServiceImpl.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/CrashReport.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/CrashReport.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/CrashReport.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/CrashReport.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/DownloadServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/DownloadServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/DownloadServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/DownloadServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/FeedbackServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FeedbackServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/FeedbackServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FeedbackServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/FileExporter.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FileExporter.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/FileExporter.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FileExporter.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/FileExporterImpl.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FileExporterImpl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/FileExporterImpl.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FileExporterImpl.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/FileImporter.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FileImporter.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/FileImporter.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FileImporter.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/FileImporterException.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FileImporterException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/FileImporterException.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FileImporterException.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/FileImporterImpl.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FileImporterImpl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/FileImporterImpl.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/FileImporterImpl.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/GalleryEmail.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/GalleryEmail.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/GalleryEmail.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/GalleryEmail.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/GetMotdServiceImpl.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/GetMotdServiceImpl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/GetMotdServiceImpl.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/GetMotdServiceImpl.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/LocalUser.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/LocalUser.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/LocalUser.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/LocalUser.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/LoginServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/LoginServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/LoginServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/LoginServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/LogoutServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/LogoutServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/LogoutServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/LogoutServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/OdeAuthFilter.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/OdeAuthFilter.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/OdeAuthFilter.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/OdeAuthFilter.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/OdeRemoteServiceServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/OdeRemoteServiceServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/OdeRemoteServiceServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/OdeRemoteServiceServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/OdeServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/OdeServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/OdeServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/OdeServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/ProjectServiceImpl.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/ProjectServiceImpl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/ProjectServiceImpl.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/ProjectServiceImpl.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/ReceiveBuildServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/ReceiveBuildServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/ReceiveBuildServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/ReceiveBuildServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/RestServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/RestServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/RestServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/RestServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/Server.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/Server.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/Server.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/Server.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/TosServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/TosServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/TosServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/TosServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/UploadServlet.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/UploadServlet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/UploadServlet.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/UploadServlet.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/UserInfoServiceImpl.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/UserInfoServiceImpl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/UserInfoServiceImpl.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/UserInfoServiceImpl.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/Whitelist.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/Whitelist.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/Whitelist.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/Whitelist.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/components/FirebaseAuthServiceImpl.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/components/FirebaseAuthServiceImpl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/components/FirebaseAuthServiceImpl.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/components/FirebaseAuthServiceImpl.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/cookieauth/CookieAuth.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/cookieauth/CookieAuth.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/cookieauth/CookieAuth.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/cookieauth/CookieAuth.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/cookieauth/cookie.proto b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/cookieauth/cookie.proto similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/cookieauth/cookie.proto rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/cookieauth/cookie.proto diff --git a/appinventor/appengine/src/com/google/appinventor/server/encryption/EncryptionException.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/encryption/EncryptionException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/encryption/EncryptionException.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/encryption/EncryptionException.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/encryption/EncryptionStrategy.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/encryption/EncryptionStrategy.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/encryption/EncryptionStrategy.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/encryption/EncryptionStrategy.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/encryption/Encryptor.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/encryption/Encryptor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/encryption/Encryptor.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/encryption/Encryptor.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/encryption/KeyczarEncryptor.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/encryption/KeyczarEncryptor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/encryption/KeyczarEncryptor.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/encryption/KeyczarEncryptor.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/encryption/NopEncryptor.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/encryption/NopEncryptor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/encryption/NopEncryptor.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/encryption/NopEncryptor.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/flags/Flag.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/flags/Flag.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/flags/Flag.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/flags/Flag.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/flags/IllegalFlagValueException.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/flags/IllegalFlagValueException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/flags/IllegalFlagValueException.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/flags/IllegalFlagValueException.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/loginmessages_en.properties b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/loginmessages_en.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/loginmessages_en.properties rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/loginmessages_en.properties diff --git a/appinventor/appengine/src/com/google/appinventor/server/loginmessages_lt.properties b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/loginmessages_lt.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/loginmessages_lt.properties rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/loginmessages_lt.properties diff --git a/appinventor/appengine/src/com/google/appinventor/server/loginmessages_pt.properties b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/loginmessages_pt.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/loginmessages_pt.properties rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/loginmessages_pt.properties diff --git a/appinventor/appengine/src/com/google/appinventor/server/loginmessages_zh_cn.properties b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/loginmessages_zh_cn.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/loginmessages_zh_cn.properties rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/loginmessages_zh_cn.properties diff --git a/appinventor/appengine/src/com/google/appinventor/server/project/CommonProjectService.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/CommonProjectService.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/project/CommonProjectService.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/CommonProjectService.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/project/utils/Security.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/utils/Security.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/project/utils/Security.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/utils/Security.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/project/utils/TempFiles.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/utils/TempFiles.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/project/utils/TempFiles.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/utils/TempFiles.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/GalleryProtobuf.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/youngandroid/GalleryProtobuf.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/GalleryProtobuf.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/youngandroid/GalleryProtobuf.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/GalleryToken.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/youngandroid/GalleryToken.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/GalleryToken.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/youngandroid/GalleryToken.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectService.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectService.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectService.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectService.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/YoungAndroidSettingsBuilder.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/youngandroid/YoungAndroidSettingsBuilder.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/YoungAndroidSettingsBuilder.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/youngandroid/YoungAndroidSettingsBuilder.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/gallerytoken.proto b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/youngandroid/gallerytoken.proto similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/gallerytoken.proto rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/project/youngandroid/gallerytoken.proto diff --git a/appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonArray.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonArray.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonArray.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonArray.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonBoolean.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonBoolean.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonBoolean.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonBoolean.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonNumber.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonNumber.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonNumber.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonNumber.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonObject.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonObject.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonObject.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonObject.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonParser.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonParser.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonParser.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonParser.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonString.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonString.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonString.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonString.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonValue.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonValue.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/properties/json/ServerJsonValue.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/properties/json/ServerJsonValue.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/storage/BlobReadException.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/BlobReadException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/storage/BlobReadException.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/BlobReadException.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/storage/BlobWriteException.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/BlobWriteException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/storage/BlobWriteException.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/BlobWriteException.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/storage/ObjectifyException.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/ObjectifyException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/storage/ObjectifyException.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/ObjectifyException.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/storage/ObjectifyStorageIo.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/ObjectifyStorageIo.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/storage/ObjectifyStorageIo.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/ObjectifyStorageIo.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/storage/StorageIo.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/StorageIo.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/storage/StorageIo.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/StorageIo.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/storage/StorageIoInstanceHolder.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/StorageIoInstanceHolder.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/storage/StorageIoInstanceHolder.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/StorageIoInstanceHolder.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/storage/StoredData.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/StoredData.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/storage/StoredData.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/StoredData.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/storage/UnauthorizedAccessException.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/UnauthorizedAccessException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/storage/UnauthorizedAccessException.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/UnauthorizedAccessException.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/storage/UserAlreadyExistsException.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/UserAlreadyExistsException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/storage/UserAlreadyExistsException.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/storage/UserAlreadyExistsException.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/tokenauth/CloudDBTokenAuth.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokenauth/CloudDBTokenAuth.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/tokenauth/CloudDBTokenAuth.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokenauth/CloudDBTokenAuth.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/tokenauth/TokenAuthServiceImpl.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokenauth/TokenAuthServiceImpl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/tokenauth/TokenAuthServiceImpl.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokenauth/TokenAuthServiceImpl.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/tokenauth/TranslatorToken.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokenauth/TranslatorToken.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/tokenauth/TranslatorToken.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokenauth/TranslatorToken.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/tokenauth/clouddb.proto b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokenauth/clouddb.proto similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/tokenauth/clouddb.proto rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokenauth/clouddb.proto diff --git a/appinventor/appengine/src/com/google/appinventor/server/tokenauth/tr.proto b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokenauth/tr.proto similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/tokenauth/tr.proto rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokenauth/tr.proto diff --git a/appinventor/appengine/src/com/google/appinventor/server/tokens/Token.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokens/Token.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/tokens/Token.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokens/Token.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/tokens/TokenException.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokens/TokenException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/tokens/TokenException.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokens/TokenException.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/tokens/TokenProto.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokens/TokenProto.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/tokens/TokenProto.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokens/TokenProto.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/tokens/token.proto b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokens/token.proto similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/tokens/token.proto rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/tokens/token.proto diff --git a/appinventor/appengine/src/com/google/appinventor/server/util/BuildData.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/BuildData.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/util/BuildData.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/BuildData.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/util/CacheHeaders.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/CacheHeaders.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/util/CacheHeaders.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/CacheHeaders.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/util/CacheHeadersImpl.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/CacheHeadersImpl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/util/CacheHeadersImpl.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/CacheHeadersImpl.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/util/CsvParser.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/CsvParser.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/util/CsvParser.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/CsvParser.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/util/FileUtil.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/FileUtil.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/util/FileUtil.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/FileUtil.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/util/ModifiedHeaders.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/ModifiedHeaders.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/util/ModifiedHeaders.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/ModifiedHeaders.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/util/PasswordHash.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/PasswordHash.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/util/PasswordHash.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/PasswordHash.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/util/UriBuilder.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/UriBuilder.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/util/UriBuilder.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/UriBuilder.java diff --git a/appinventor/appengine/src/com/google/appinventor/server/util/VersionString.java b/appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/VersionString.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/server/util/VersionString.java rename to appinventor/appengine-backend/src/main/java/com/google/appinventor/server/util/VersionString.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/Bad-Extension.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Bad-Extension.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/Bad-Extension.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Bad-Extension.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/BarOld.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/BarOld.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/BarOld.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/BarOld.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/Buggy.zip b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Buggy.zip similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/Buggy.zip rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Buggy.zip diff --git a/appinventor/appengine/tests/com/google/appinventor/server/ComponentServiceTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/ComponentServiceTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/ComponentServiceTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/ComponentServiceTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/Corrupt-Extension.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Corrupt-Extension.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/Corrupt-Extension.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Corrupt-Extension.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/CorruptExtensionTestMissingDescriptors.aia b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/CorruptExtensionTestMissingDescriptors.aia similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/CorruptExtensionTestMissingDescriptors.aia rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/CorruptExtensionTestMissingDescriptors.aia diff --git a/appinventor/appengine/tests/com/google/appinventor/server/DownloadServletTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/DownloadServletTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/DownloadServletTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/DownloadServletTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/EmptyZip.zip b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/EmptyZip.zip similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/EmptyZip.zip rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/EmptyZip.zip diff --git a/appinventor/appengine/tests/com/google/appinventor/server/Extension-Bundle-With-2-Extensions.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Extension-Bundle-With-2-Extensions.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/Extension-Bundle-With-2-Extensions.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Extension-Bundle-With-2-Extensions.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/Extension-Bundle.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Extension-Bundle.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/Extension-Bundle.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Extension-Bundle.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/FCQN-Single-Extension.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/FCQN-Single-Extension.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/FCQN-Single-Extension.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/FCQN-Single-Extension.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/FileExporterImplTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/FileExporterImplTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/FileExporterImplTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/FileExporterImplTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/FileImporterImplTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/FileImporterImplTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/FileImporterImplTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/FileImporterImplTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/FooBar.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/FooBar.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/FooBar.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/FooBar.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/FooOld.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/FooOld.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/FooOld.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/FooOld.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/LocalDatastoreTestCase.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/LocalDatastoreTestCase.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/LocalDatastoreTestCase.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/LocalDatastoreTestCase.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/NotAValidProjectArchive.zip b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/NotAValidProjectArchive.zip similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/NotAValidProjectArchive.zip rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/NotAValidProjectArchive.zip diff --git a/appinventor/appengine/tests/com/google/appinventor/server/OdeAuthFilterTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/OdeAuthFilterTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/OdeAuthFilterTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/OdeAuthFilterTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/OldExtensionTest.aia b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/OldExtensionTest.aia similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/OldExtensionTest.aia rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/OldExtensionTest.aia diff --git a/appinventor/appengine/tests/com/google/appinventor/server/Project1.zip b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Project1.zip similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/Project1.zip rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Project1.zip diff --git a/appinventor/appengine/tests/com/google/appinventor/server/ProjectServiceTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/ProjectServiceTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/ProjectServiceTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/ProjectServiceTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/ProjectWithAssets.zip b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/ProjectWithAssets.zip similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/ProjectWithAssets.zip rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/ProjectWithAssets.zip diff --git a/appinventor/appengine/tests/com/google/appinventor/server/Transition-Extension-Bundle.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Transition-Extension-Bundle.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/Transition-Extension-Bundle.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Transition-Extension-Bundle.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/Transition-Extension-With-Files-Reversed.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Transition-Extension-With-Files-Reversed.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/Transition-Extension-With-Files-Reversed.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/Transition-Extension-With-Files-Reversed.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/WEB-INF/whitelist b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/WEB-INF/whitelist similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/WEB-INF/whitelist rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/WEB-INF/whitelist diff --git a/appinventor/appengine/tests/com/google/appinventor/server/WhitelistTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/WhitelistTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/WhitelistTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/WhitelistTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/encryption/KeyczarEncryptorTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/encryption/KeyczarEncryptorTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/encryption/KeyczarEncryptorTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/encryption/KeyczarEncryptorTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/flags/FlagTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/flags/FlagTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/flags/FlagTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/flags/FlagTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/package.Component.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/package.Component.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/package.Component.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/package.Component.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/project/utils/SecurityTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/project/utils/SecurityTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/project/utils/SecurityTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/project/utils/SecurityTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/project/utils/TempFilesTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/project/utils/TempFilesTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/project/utils/TempFilesTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/project/utils/TempFilesTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectServiceTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectServiceTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectServiceTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectServiceTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/storage/ObjectifyStorageIoTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/storage/ObjectifyStorageIoTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/storage/ObjectifyStorageIoTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/storage/ObjectifyStorageIoTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/server/test.EmptyComponentDescriptor.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test.EmptyComponentDescriptor.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/test.EmptyComponentDescriptor.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test.EmptyComponentDescriptor.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/test.Extension1.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test.Extension1.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/test.Extension1.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test.Extension1.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/test.Extension3.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test.Extension3.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/test.Extension3.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test.Extension3.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/test.Extension4.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test.Extension4.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/test.Extension4.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test.Extension4.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/test.NoComponentDescriptor.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test.NoComponentDescriptor.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/test.NoComponentDescriptor.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test.NoComponentDescriptor.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/test2.Extension2.aix b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test2.Extension2.aix similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/test2.Extension2.aix rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/test2.Extension2.aix diff --git a/appinventor/appengine/tests/com/google/appinventor/server/util/VersionStringTest.java b/appinventor/appengine-backend/src/test/java/com/google/appinventor/server/util/VersionStringTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/server/util/VersionStringTest.java rename to appinventor/appengine-backend/src/test/java/com/google/appinventor/server/util/VersionStringTest.java diff --git a/appinventor/appengine/src/com/google/appinventor/YaClient-dev.gwt.xml b/appinventor/appengine-frontend/YaClient-dev.gwt.xml similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/YaClient-dev.gwt.xml rename to appinventor/appengine-frontend/YaClient-dev.gwt.xml diff --git a/appinventor/appengine/src/com/google/appinventor/YaClient.gwt.xml b/appinventor/appengine-frontend/YaClient.gwt.xml similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/YaClient.gwt.xml rename to appinventor/appengine-frontend/YaClient.gwt.xml diff --git a/appinventor/appengine-frontend/build.gradle.kts b/appinventor/appengine-frontend/build.gradle.kts new file mode 100644 index 00000000000..c922b588813 --- /dev/null +++ b/appinventor/appengine-frontend/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + java +} + +group = "com.google.appinventor" +version = "unspecified" + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} + +dependencies { +} diff --git a/appinventor/appengine/src/com/google/appinventor/client/AdminUserList.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/AdminUserList.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/AdminUserList.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/AdminUserList.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/AssetManager.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/AssetManager.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/AssetManager.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/AssetManager.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/BugReport.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/BugReport.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/BugReport.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/BugReport.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/ConnectProgressBar.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/ConnectProgressBar.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/ConnectProgressBar.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/ConnectProgressBar.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/DesignToolbar.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/DesignToolbar.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/DesignToolbar.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/DesignToolbar.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/ErrorReporter.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/ErrorReporter.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/ErrorReporter.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/ErrorReporter.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/ExtendedServiceProxy.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/ExtendedServiceProxy.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/ExtendedServiceProxy.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/ExtendedServiceProxy.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/Images.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/Images.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/Images.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/Images.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/LoadGalleryProject.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/LoadGalleryProject.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/LoadGalleryProject.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/LoadGalleryProject.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/Log.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/Log.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/Log.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/Log.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/Logger.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/Logger.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/Logger.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/Logger.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/MotdFetcher.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/MotdFetcher.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/MotdFetcher.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/MotdFetcher.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/MultiRegistry.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/MultiRegistry.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/MultiRegistry.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/MultiRegistry.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/Ode.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/Ode.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/Ode.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/Ode.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeAsyncCallback.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeAsyncCallback.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeAsyncCallback.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeAsyncCallback.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeBoxRegistry.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeBoxRegistry.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeBoxRegistry.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeBoxRegistry.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages.java old mode 100755 new mode 100644 similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_ca.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_ca.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_ca.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_ca.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_de.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_de.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_de.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_de.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_es_ES.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_es_ES.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_es_ES.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_es_ES.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_fr_FR.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_fr_FR.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_fr_FR.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_fr_FR.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_hu.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_hu.properties old mode 100755 new mode 100644 similarity index 98% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_hu.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_hu.properties index 1a823c9f3b4..24118c4903a --- a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_hu.properties +++ b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_hu.properties @@ -1,1681 +1,1681 @@ -defaultText = Alapértelmezett -cancelButton = Mégse -okButton = OK -dismissButton = Elvetés -oldNameLabel = Jelenlegi név: -newNameLabel = Új név: -noneCaption = Nincs -deleteButton = Törlés -deleteProjectButton = Projekt törlése -publishToGalleryButton = Megosztás a Galériában -updateGalleryAppButton = Alkalmazás új verziójának feltöltése a Galériába -showWarnings = Figyelmeztetések mutatása -hideWarnings = Figyelmeztetések elrejtése -addButton = Fájl feltöltése... -projectNameHeader = Név -projectDateCreatedHeader = Készítés dátuma -projectDateModifiedHeader = Módosítás dátuma -projectPublishedHeader = Megosztva a Galériában -saveButton = Mentés -saveAsButton = Mentés másként -checkpointButton = Mentett verzió ... -toggleTutorialButton = Segédlet váltása -addFormButton = Képernyő hozzáadása ... -removeFormButton = Képernyő törlése -connectButton = Kapcsolat -reallyDeleteForm = A képernyő eltávolításával az összes hozzá tartozó komponens és blokk is törlődik.\nA törlés később nem vonható vissza.\nBiztosan el akarod távolítani a {0} képernyőt a projektből? -openBlocksEditorButton = Blokk szerkesztő megnyitása -screensButton = Képernyők ... -switchToBlocksEditorButton = Parancsok -switchToFormEditorButton = Képernyő -isBuildingButton = Folyamatban az alkalmazás csomagolása ... -cancelBlocksEditorButton = Folyamatban a Képernyő Szerkesztő megnyitása ... (kattints ide ha mégsem akarod megnyitni) -blocksEditorIsOpenButton = A Blokk Szerkesztő nyitva van -switchLanguageButton = Nyelv -deleteComponentButton = Komponens törlése -publishButton = Megosztás -switchLanguageEnglishButton = Angol -switchLanguageChineseCNButton = Kínai -switchLanguageGermanButton = Német -switchLanguageVietnameseButton = Vietnámi -moderationDotDotDot = ... -moderationReportTextHeader = Jelentés -moderationAppHeader = App -moderationReportDateCreatedHeader = Jelentve ekkor -moderationAppAuthorHeader = App készítője -moderationReporterHeader = Jelentő -inappropriateAppContentRemoveTitle = Helytelen app tartalom: törlés -inappropriateAppContentTitle = Helytelen app tartalom -inappropriateUserProfileContentTitle = Helytelen felhasználói profil leírás -labelChooseTemplate = Válassz egy sablont -emailSentFrom = Küldő: -emailSentTo = Címzett: -buttonSendEmail = E-mail küldése -labelDeactivateApp = App inaktiválása -labelReactivateApp = App újraaktiválása -labelDeactivateAppAndSendEmail = Alkalmazás inaktiválás és e-mail küldése -labelmarkAsResolved = Jelölés megoldottként -labelmarkAsUnresolved = Jelölés megoldatlanként -labelSeeAllActions = Előző műveletek -titleSeeAllActionsPopup = Előző jelentéshez kapcsolódó műveletek -galleryMoreReports = További Jelentések -symbolX = X -labelCancel = Mégse -labelConfirm = Megerősítés -inappropriateAppContentRemoveEmail = A(z) \"{0}\" alkalmazásodat eltávolítottuk a Galériából, mert nem odaillő tartalmat találtunk benne. Kérlek nézd át az erre vonatkozó szabályokat a http://ai2.appinventor.mit.edu/about/termsofservice.html címen. Ha úgy érzed igazságtalanul jártunk el veled szemben küldj róla egy e-mailt nekünk.\n -inappropriateAppContentEmail = A(z) \"{0}\" alkalmazásodban nem odaillő tartalmat találtunk. Kérlek nézd át az erre vonatkozó szabályokat és módosítsd az alkalmazásodat annak megfelelően. -inappropriateUserProfileContentEmail = A profilod leírása nem odaillő szöveget tartalmaz. Kérlek javítsd! -seeMoreLink = több mutatása ... -hideLink = elrejtés -moderationActionSendAnEmail = e-mail küldése: -moderationActionDeactivateThisAppWithEmail = inaktiválja az alkalmazást és elküld egy emailt: -moderationActionReactivateThisApp = újraaktiválja ezt az alkalmazást -moderationActionMarkThisReportAsResolved = a jelentés megjelölése megoldottként -moderationActionMarkThisReportAsUnresolved = a jelentés megjelölése megoldatlanként -moderationShowResolvedReports = Mutasd a megoldott jelentéseket -moderationSendEmailTitle = E-mail küldése -moderationAppReactivatedTitle = App Inventor Galéria: Alkalmazás aktiválva -moderationAppReactivateBody = A(z) \"{0}\" alkalmazásod újra lett aktiválva. -moderationAppDeactivatedTitle = App Inventor Galéria: Alkalmazás deaktiválva -moderationErrorFailToSendEmail = Nem sikerült elküldeni az e-mailt, kérlek próbálkozz újra később. -getMotdFailed = Nem sikerült letölteni a szerverről a Mai Nap Üzenetét. -titleYoungAndroid = MIT App Inventor -internalErrorReportBug = Belső hiba történt. Szeretnéd jelenteni a hibát? -internalError = Belső hiba történt. -internalErrorSeeDebuggingView = Belső hiba történt. A hibakereső nézetben visszakereshető. -internalErrorClickOkDebuggingView = Belső hiba történt. További tudnivalókért kattints az \"ok\" gombra. -serverUnavailable = A kiszolgáló pillanatnyilag nem elérhető. Kérlek próbáld újra később. -noprojectDialogTitle = Nincs projekt kijelölve -noprojectDuringConnect = Kapcsolódás előtt létre kell hozni vagy kijelölni egy projektet! -galleryIdNotExist = Nincs alkalmazás a Galériában ilyen azonosítóval. -defaultRpcMessage = Töltés ... -savingRpcMessage = Mentés ... -copyingRpcMessage = Másolás ... -deletingRpcMessage = Törlés ... -packagingRpcMessage = Csomagolás ... -downloadingRpcMessage = Letöltés a telefonra... -gitBuildId = Fordítás dátuma: {0} Verzió: {1} -privacyLink = Adatvédelmi irányelvek -termsLink = Feltételek -privacyTermsLink = Adatvédelmi irányelvek és felhasználási feltételek -projectsTabName = Projektek -projectMenuItem = Projektjeim -newProjectMenuItem = Új projekt létrehozása -importProjectMenuItem = Projekt importálása (.aia) saját gépről ... -trashProjectMenuItem = Projekt törlése -saveMenuItem = Projekt mentése -saveAsMenuItem = Projekt mentése másként... -checkpointMenuItem = Pillanatnyi állapot mentése -importTemplateButton = Projekt (.aia) betöltése a tárolóból... -exportProjectMenuItem = Kijelölt projekt (.aia) exportálása a számítógépemre -exportAllProjectsMenuItem = Összes projekt exportálása -downloadKeystoreMenuItem = Kulcstár exportálása -uploadKeystoreMenuItem = Kulcstár importálása -deleteKeystoreMenuItem = Kulcstár törlése -componentsTabName = Komponensek -myComponentsMenuItem = Saját komponensek -startNewComponentMenuItem = Új komponens létrehozása -importComponentMenuItem = Komponens importálása a projektbe... -importExtensionMenuItem = Kiegészítő komponens importálása -buildComponentMenuItem = Komponens csomagolása -uploadComponentMenuItem = Komponens (.aix) feltöltése saját gépről... -componentUploadWizardCaption = Komponens feltöltése... -componentImportWizardCaption = Kiegészítő komponens importálása a projektbe -componentRenameWizardCaption = Kiegészítő komponens átnevezése -componentNameLabel = Kiegészítő neve -componentImportError = A kiegészítő komponenst nem sikerült importálni! -componentImportUnknownURLError = Ismeretlen URL! Nem sikerült importálni a komponenst! -componentUpgradedAlert = Kiegészítő komponens frissítésre került: -notComponentArchiveError = A kiválasztott fájl nem tartalmaz komponenst!\nA komponens fájlok kiterjesztése aix. -noComponentSelectedError = Válaszd ki az importálandó komponenst -noComponentFound = Nem találom a \"{0}\" komponenst a \"{1}\" projekt betöltése során. -noUrlError = Adj meg egy URL-t -componentNameHeader = Név -componentVersionHeader = Verzió -confirmDeleteComponents = Biztosan törölni akarod az alábbi komponens(eke)t: {0}? -componentImportFromComputer = Saját gépről -componentImportFromURL = URL -componentDatabaseCorrupt = Hibás a \"{0}\" projekthez tartozó komponens adatbázis. -extensionDescriptorCorrupt = Hibás a \"{0}\" projekthez tartozó \"{1}\" komponens leírása. -invalidExtensionInProject = A \"{0}\" projekt hibás kiegészítő komponenst tartalmaz. Az App Inventor megpróbálja azt figyelmen kívül hagyni és folytatni a betöltést. -connectTabName = Adatkapcsolat -AICompanionMenuItem = AI Companion -emulatorMenuItem = Emulátor -feedbackLink = Hiba Jelentése -tabNameGallery = Galéria -tabNameModeration = Moderáció -privateProfileLink = Profil -tabNameProjects = Projektjeim -usbMenuItem = USB -resetConnectionsMenuItem = Kapcsolat bontása -hardResetConnectionsMenuItem = Emulátor alaphelyzetbe állítása -buildTabName = Apk fájl létrehozása -showBarcodeMenuItem = App (QR kód létrehozása .apk-hoz) -showBarcodeMenuItem2 = Google Play App (QR kód létrehozása .apk-hoz) -downloadToComputerMenuItem = App (.apk mentése a számítógépre) -downloadToComputerMenuItem2 = Google Play App (.apk mentése a számítógépre) -generateYailMenuItem = YAIL Forráskód Generálása -helpTabName = Súgó -aboutMenuItem = Névjegy -companionInformation = Companion segédalkalmazás adatai -companionUpdate = Companion segédalkalmazás frissítése -companionUpdateMustHaveProject = Létre kell hoznod egy projektet a Companion segédalkalmazás frissítéséhez -showSplashMenuItem = Indító képernyő megjelenítése -libraryMenuItem = Könyvtár -getStartedMenuItem = Kezdjünk hozzá -extensionsMenuItem = Kiegészítő komponensek -tutorialsMenuItem = Segédletek -troubleshootingMenuItem = Hibaelhárítás -forumsMenuItem = Fórumok -feedbackMenuItem = Hiba jelentése -adminTabName = Adminisztrátor -downloadUserSourceMenuItem = Felhasználói forráskód letöltése -switchToDebugMenuItem = Váltás a hibakereső panelre -myProjectsTabName = Projektjeim -guideTabName = Útmutató -feedbackTabName = Hiba jelentése -galleryTabName = Galéria -signOutLink = Kijelentkezés -tabNameDesign = Design -tabNameDebugging = (Hibakeresés) -chooseProject = Kérlek, válassz egy projektet megnyitásra, vagy hozz létre egy új projektet! -emailInboxTitle = E-mailek -emailSendTitle = E-mail küldése -componentListBoxCaption = Saját komponensek -assetListBoxCaption = Média -messagesOutputBoxCaption = Üzenetek -motdBoxCaption = Üdvözöllek az App Inventorban! -odeLogBoxCaption = Fejlesztői Üzenetek -paletteBoxCaption = Paletta -projectListBoxCaption = Projektjeim -studioListBoxCaption = Studióim -profilePageBoxCaption = Profilom -moderationPageBoxCaption = Riportok -galleryListBoxCaption = Galéria -galleryAppBoxCaption = Alkalmazás a Galériában -userProfileBoxCaption = Felhasználói profil -propertiesBoxCaption = Tulajdonságok -sourceStructureBoxCaption = Komponensek -blockSelectorBoxCaption = Parancsok -builtinBlocksLabel = Beépített -builtinControlLabel = Vezérlés -builtinLogicLabel = Logika -builtinTextLabel = Szöveg -builtinListsLabel = Listák -builtinColorsLabel = Színek -builtinVariablesLabel = Változók -builtinProceduresLabel = Eljárások -anyComponentLabel = Bármilyen komponens -textAnyComponentLabel = Bármely -viewerBoxCaption = Megjelenítő -savedProject = Az App Inventor elmentette a projekt módosításait ({0}) -saveErrorMultipleFiles = Szerverhiba: nem sikerült elmenteni egy vagy több fájlt. Kérlek próbáld újra később! -yailGenerationError = Hiba történt a(z) {0} képernyőn a YAIL generálása során: {1}. A hiba javítása után próbáld újra a YAIL kód generálást. -nonVisibleComponentsHeader = Rejtett komponensek -showHiddenComponentsCheckbox = Rejtett komponensek megjelenítése -previewTabletSize = Tablet mérete -previewPhoneSize = Telefonméret -renameTitle = komponens átnevezése -malformedComponentNameError = A komponens neve csak betűt, számot és alul vonást tartalmazhat, és betűvel kell kezdődnie -duplicateComponentNameError = Már van ilyen nevű komponens! -sameAsComponentTypeNameError = A komponens neve nem lehet azonos egy komponenstípus nevével -sameAsComponentInstanceNameError = A komponens típusának neve nem egyezhet meg egy már létező komponens példány nevével! -reservedNameError = A név nem lehet egyik sem a következők közül: CsvUtil, Double, Float, Integer, JavaCollection, JavaIterator, KawaEnvironment, Long, Short, SimpleForm, String, Pattern, YailList, YailNumberToString, YailRuntimeError, abstract, continue, for, new, switch, assert, default, goto, package, synchronized, boolean, do, if, private, this, break, double, implements, protected, throw, byte, else, import, public, throws, case, enum, instanceof, return, transient, catch, extends, int, short, try, char, final, interface, static, void, class, finally, long, strictfp, volatile, const, float, native, super, while -reallyDeleteComponent = A komponens eltávolításával törlődni fog az összes hozzá tartozó blokk is. Biztosan el akarod távolítani? -reallyRemoveComponent = A komponens típus eltávolításával törlődni fog az összes példánya és a hozzájuk tartozó blokkok is. Biztosan el akarod távolítani? -textPropertyValue = {0} felirat -badValueForHorizontalAlignment = Rendszerhiba: hibás érték - {0} - a vízszintes elrendezésre. -badValueForVerticalAlignment = Rendszerhiba: hibás érték - {0} - a függőleges elrendezésre. -widthPropertyCaption = Szélesség -heightPropertyCaption = Magasság -hintPropertyValue = Tipp a {0} értékhez -externalComponentVersion = Kiegészítő Komponens Verziója: -dateBuilt = Szerkesztés dátuma: -moreInformation = További információ -loadError = Szerverhiba: fájl betöltése sikertelen. Próbáld újra később! -saveError = Szerverhiba: fájl mentése sikertelen. Próbáld újra később! -blocksEditorTabName = {0} blokk -blocksNotSaved = Nem sikerült betölteni a blokkokat. A {0} képernyőn található blokkok nem lesznek elmentve. -blocksLoadFailure = A {0} képernyőhöz tartozó blokkokat nem sikerült betölteni. Amíg a probléma fennáll, nem fogsz tudni szerkeszteni a blokk szerkesztőben. -weakAccelerometerSensitivity = alacsony -moderateAccelerometerSensitivity = közepes -strongAccelerometerSensitivity = magas -LegacyModeProperties = Kompatibilitási mód -fixedSizing = Fix méretezés -responsiveSizing = Reszponzív méretezés -leftTextAlignment = balra zárt -centerTextAlignment = középre zárt -rightTextAlignment = jobbra zárt -horizontalAlignmentChoiceLeft = balra -horizontalAlignmentChoiceRight = jobbra -horizontalAlignmentChoiceCenter = középre -verticalAlignmentChoiceTop = fel -verticalAlignmentChoiceCenter = középre -verticalAlignmentChoiceBottom = le -defaultButtonShape = alapértelmezett -roundedButtonShape = lekerekített -rectButtonShape = négyszögletű -ovalButtonShape = ovális -noAssetSelected = Válassz ki egy erőforrást! -noComponentSelected = Válassz ki egy komponenst! -noneColor = Nincs -blackColor = Fekete -blueColor = Kék -cyanColor = Ciánkék -defaultColor = Alapértelmezett -darkGrayColor = Sötétszürke -grayColor = Szürke -greenColor = Zöld -lightGrayColor = Világos szürke -magentaColor = Bíborvörös -orangeColor = Narancssárga -pinkColor = Rózsaszín -redColor = Piros -whiteColor = Fehér -yellowColor = Sárga -defaultFontTypeface = alapértelmezett -sansSerifFontTypeface = sans serif (talp nélküli) -serifFontTypeface = serif (talpas) -monospaceFontTypeface = azonos szélességű -automaticCaption = Automatikus -fillParentCaption = Szülő komponens kitöltése -percentCaption = százalék -pixelsCaption = képpont -pixelsSummary = {0} képpont -percentSummary = {0} százalék -nonnumericInputError = Az érték csak pozitív egész szám lehet -nonvalidPercentValue = A százalékos érték csak 0 és 100 között lehet -defaultScreenAnimation = Alapbeállítás -fadeScreenAnimation = Áttűnés -zoomScreenAnimation = Nagyítás -slideHorizontalScreenAnimation = Vízszintes csúsztatás -slideVerticalScreenAnimation = Függőleges csúsztatás -noneScreenAnimation = Nincs -unspecifiedScreenOrientation = Nem meghatározott -portraitScreenOrientation = Portré -landscapeScreenOrientation = Tájkép -sensorScreenOrientation = Érzékelő -userScreenOrientation = Felhasználó -shortToastLength = Rövid -longToastLength = Hosszú -renameButton = Átnevezés -addScreenButton = Hozzáadás -cancelScreenButton = Ne add hozzá -newFormTitle = Új képernyő -formNameLabel = Képernyő neve: -formCountErrorLabel = Figyelmeztetés: a képernyők száma meghaladhatja az App Inventor képességeit. Kattints Biztosan szeretnél új képernyőt hozzáadni?

-malformedFormNameError = A képernyő neve csak betűt, számot és alulvonást tartalmazhat, és betűvel kell kezdődnie -duplicateFormNameError = Már van ilyen nevű képernyő! -addFormError = Szerverhiba: képernyő hozzáadása sikertelen. Próbáld újra később! -buildRequestedMessage = Kérés a(z) {0} alkalmazás fordítására {1} időpontban. -buildError = Szerverhiba: nem sikerült lefordítani az alkalmazást. Próbáld újra később! -buildFailedError = Nem sikerült lefordítani az alkalmazást! -buildServerBusyError = Az alkalmazás fordító szerver elfoglalt. Kérlek próbáld újra pár perc múlva. -buildServerDifferentVersion = Az alkalmazás fordító szerver nem kompatibilis az App Inventornak ezzel a verziójával. -errorGeneratingYail = Nem sikerült a(z) {0} alkalmazáshoz a kód generálása. -deleteFileCommand = Törlés... -downloadFileCommand = Letöltés a számítógépemre -checkpointTitle = Pillanatnyi állapot - {0} -saveAsTitle = Mentés Másként - {0} -defaultCheckpointProjectName = {0}_állapot{1} -previousCheckpointsLabel = Korábbi állapotok: -defaultSaveAsProjectName = {0}_másolat -checkpointNameLabel = Projekt állapot elnevezése: -copyProjectError = Szerverhiba: projekt másolása sikertelen. Próbáld újra később! -reallyDeleteFile = Biztosan törölni szeretnéd a fájlt? Ez az App Inventor szerverről való végleges törlést jelent. Az alkalmazásod egyes részei továbbra is hivatkozhatnak a törölt fájlra, ezeket meg kell majd változtatnod. -deleteFileError = Szerverhiba: fájl törlése sikertelen. Próbáld újra később! -phoneNotConnected = A készülék nincs csatlakoztatva. -barcodeTitle = A {0} hivatkozás vonalkódja -barcodeWarning = Figyelem: a vonalkód csak 2 óráig érvényes. Ld. {0} a gyakran ismételt kérdést {1} arról, hogy hogyan lehet megosztani az alkalmazásodat másokkal. -projectLoadError = Szerverhiba: nem sikerült betölteni a projektet. Próbáld újra később! -projectInformationRetrievalError = Szerverhiba: nem sikerült elérni a projekt adatait. Próbáld újra később! -downloadAllAlert = A projektek letöltése eltarthat egy ideig. Kérlek, várj türelmesen... -moreActionsButton = További akciók -downloadUserSourceDialogTitle = Felhasználói forráskód letöltése -userIdLabel = Felhasználó azonosító vagy e-mail (kis-nagybetű érzékeny): -projectIdLabel = Projekt azonosító vagy név: -invalidUserIdOrProjectIdError = Kérlek add meg az e-mail címedet/felhasználói azonosítódat és a projekt nevét/azonosítóját hogy letölthesd azt. -noProjectSelectedForDelete = Válassz egy projektet, hogy töröljük -confirmDeleteSingleProject = Biztosan törölni akarod ezt a projektet: {0} -confirmDeleteSinglePublishedProject = Biztosan törölni akarod ezt a projektet: {0}? Ha az alkalmazást a Galériába is feltöltötted, akkor onnan is törlődni fog. -confirmDeleteManyProjects = Biztosan törölni akarod ezeket a projekteket: {0} -confirmDeleteManyProjectsWithGalleryOn = Biztosan törölni akarod ezeket a projekteket: {0}? Ha bármelyiket közülük feltöltötted a Galériába, akkor onnan is törlődni fognak. -deleteProjectError = Szerverhiba: nem sikerült törölni a projektet. Próbáld újra később! -wrongNumberProjectsSelected = Egyetlen projektet válassz ki. -wrongNumberProjectSelectedForPublishOrUpdate = Csak egy projektet válassz ki publikálásra vagy frissítésre. -downloadKeystoreError = Szerverhiba: nem sikerült letölteni a kulcstár fájlt. -noKeystoreToDownload = Nincs kulcstár amit le lehetne tölteni. -uploadKeystoreError = Szerverhiba: nem sikerült feltölteni a kulcsfájlt. -confirmOverwriteKeystore = Biztosan felül akarod írni a kulcsfájlodat?\n\nHa igen, akkor a korábbi kulcsfájlod el lesz távolítva az App Inventor szerverről.\n\nHa vannak alkalmazásaid a Google Play Áruházban amelyek a felülírandó kulcstárat használják, akkor nem leszel képes frissíteni azokat a programokat.\n\nEzt követően minden projekt, amelyből alkalmazás csomagot készítesz az új kulcstár fájl felhasználásával lesz aláírva. A kulcstár fájl megváltoztatása miatt lehet hogy bizonyos régebbi alkalmazásokat nem tudsz majd újratelepíteni a készülékedre. Ha nem vagy biztos benne le akarod-e cserélni, olvasd el a kulcstárakról szóló dokumentációt a \"Súgó\" (Help) menü \"Hibakeresés\" (Troubleshooting) menüpontjában, a \"Kulcstárak és Alkalmazások aláírása\" (Keystores and Signing of Applications).\n\nA kulcstár fájl lecserélése nem visszavonható művelet. -deleteKeystoreError = Szerverhiba: nem sikerült törölni a kulcstár fájlt. -confirmDeleteKeystore = Biztosan le akarod törölni a kulcsfájlodat?\n\nHa igen, akkor a kulclfájlod el lesz távolítva az App Inventor szerverről és automatikusan egy új készül helyette.\n\nHa vannak alkalmazásaid a Google Play Áruházban amelyek a régi kulcstárat használják, akkor nem leszel képes frissíteni azokat a programokat.\n\nEzt követően minden projekt, amelyből alkalmazás csomagot készítesz az új kulcstár fájl felhasználásával lesz aláírva. A kulcstár fájl megváltoztatása miatt lehet hogy bizonyos régebbi alkalmazásokat nem tudsz majd újratelepíteni a készülékedre. Ha nem vagy biztos benne le akarod-e törölni, olvasd el a kulcstárakról szóló dokumentációt a \"Súgó\" (Help) menü \"Hibakeresés\" (Troubleshooting) menüpontjában, a \"Kulcstárak és Alkalmazások aláírása\" (Keystores and Signing of Applications).\n\nA kulcstár fájl törlése nem visszavonható művelet. -clearButton = Törlés -settingsLoadError = Szerverhiba: a beállítások betöltése sikertelen. Próbáld újra később! -settingsSaveError = Szerverhiba: a beállítások mentése sikertelen. Próbáld újra később! -done = Kész -hdrClose = Bezár -hdrMinimize = Zsugorítás -hdrSettings = Beállítás -cmMinimize = Zsugorít -cmRestore = Kibővít -cmResize = Átméretez -hdrRestore = Kibővít -notAFloat = {0} az nem szám -notAnInteger = {0} az nem egy egész szám -malformedInputError = Hibásan bevitt adat! -fileUploadWizardCaption = Fájl feltöltése... -malformedFilenameTitle = Hiba: nem megfelelő fájlnév -malformedFilename = A fájl neve csak az alábbiakat tartalmazhatja: ékezet nélküli betűk, számok, valamint a \"-\", \"_\", \".\", \"!\", \"~\", \"*\", \"(\", és \")\" karakterek -filenameBadSizeTitle = Hiba: nem megfelelő fájlméret -filenameBadSize = A fájlnevek legalább 1, legfeljebb 100 karakterből állhatnak. -fileUploadingMessage = {0} feltöltése az App Inventor szerverre -fileUploadError = Szerverhiba: nem sikerült feltölteni a fájlt. Kérlek próbáld újra később! -fileTooLargeError = Hiba: nem sikerült a fájl feltöltés, mert az túl nagy -noFileSelectedTitle = Hiba: nem választottál ki egyetlen fájlt sem -noFileSelected = Válaszd ki a feltöltendő fájlt. -aiaMediaAssetTitle = Hiba: nem sikerült .aia média erőforrásként feltölteni a fájlt -aiaMediaAsset = A fájl használatához kattints az alábbi menüpontra: Projektek > Projekt importálása (.aia) saját gépről... -aiaMediaAssetHelp = http://appinventor.mit.edu/explore/ai2/share.html -confirmOverwrite = Probléma akadt {1} mentése során\n\nMár van a projektben egy {0} nevű fájl.\nTörölni akarod a régi fájlt?\nEzzel minden olyan fájlt eltávolítasz, amely ütközik a(z) {1} fájllal. -keystoreUploadWizardCaption = KulcsTár feltöltése... -keystoreUploadError = Szerverhiba: nem sikerült feltölteni a kulcstárat. Próbáld újra később! -notKeystoreError = A megadott fájl nem kucstár formátumú! -createProjectError = Szerverhiba: projekt létrehozása sikertelen. Próbáld újra később! -templateUploadWizardCaption = Projekt létrehozása sablon alapján -templateUploadNewUrlCaption = Új sablon URL megadása -inputNewUrlCaption = Adj meg egy URL-t... -newUrlLabel = Sablonok Url: -projectUploadWizardCaption = Projekt import... -gallerySearch = Keresés -galleryEmptyText = -galleryFeaturedText = Kiemelt -galleryUnfeaturedText = Nem kiemelt -galleryTutorialText = Segédlet -galleryUntutorialText = Nem segédlet -gallerySingleSpaceText = -galleryByAuthorText = Szerző neve alapján -galleryOpenText = Alkalmazás megnyitása -galleryPublishText = Közzététel -galleryUpdateText = Frissítés -galleryRemoveText = Visszavonás -galleryRemoveConfirmText = Biztosan el akarod távolítani az alkalmazást a Galériából? -galleryEditText = Szerkesztés -galleryCancelText = Mégse -galleryNoScreenShotMessage = Kérlek tölts fel egy képet az alkalmazásod képernyőjéről mielőtt nyilvánossá tennéd -galleryNotEnoughDescriptionMessage = Kérlek adj meg egy részletesebb leírást az alkalmazásodról mielőtt nyilvánossá tennéd -galleryByDeveloperPrefixedText = Szerző -galleryCreatedDateLabel = Létrehozás Dátuma: -galleryChangedDateLabel = Változtatás Dátuma: -galleryMoreInfoLabel = Tananyag/Videó -galleryCreditLabel = Köszönet: -galleryMoreInfoHint = Ha az alkalmazáshoz tartozik tananyag vagy videó, add meg az URL-jét! -galleryCcLicenseRef = A Galériába való feltöltéssel az alkalmazást a
Creative Commons Attribution Licensznek megfelelően teszed közzé. -galleryCreditHint = Másvalaki appját remixeled? Ha igen, említsd meg itt őket. -galleryDescriptionHint = Az alkalmazás leírása. -galleryAppOpening = Megnyitás... -galleryAppPublishing = Megosztás... -galleryAppUpdating = Frissítés... -galleryAppRemoving = Eltávolítás... -galleryAppsLike = Tetszik -galleryAppsAlreadyLike = Mégsem tetszik -galleryAppsByAuthorSidebar = Az alkalmazás készítője: -galleryAppCreatedPrefix = Készítés dátuma: -galleryAppChangedPrefix = Szerkesztés dátuma: -galleryRemixedFrom = Remix alapja: -galleryRemixChildren = Kattints ide a remixekért! -galleryAppsRemixesSidebar = Remixek a felhasználótól: -galleryReportPrompt = Kérlek indokold miért találod sértőnek ezt az alkalmazást, vagy hogy milyen módon nem tartja be az App Inventor Galéria Szabályait. -gallerySharePrompt = Másolás és link megosztása -galleryCopyButton = Másolás -galleryGalleryIdAction = /?galleryId= -galleryVisitGalleryAppLinkLabel = \n\nNézd meg a közzétett alkalmazásod: {0}/?galleryId={1} -galleryReportButton = Jelentés elküldése -galleryReportCompletionPrompt = Köszönjük a jelentést, egy adminisztrátor hamarosan feldolgozza azt. -galleryAlreadyReportedPrompt = Erről az alkalmazásról már küldtél jelentést. Egy adminisztrátor hamarosan feldolgozza azt. -galleryCommentError = Szerverhiba: nem sikerült letölteni a megjegyzéseket -galleryAppLikeError = Szerverhiba: nem sikerült letölteni a lájkok számát -galleryDeveloperAppError = Szerverhiba: nem sikerült letölteni a fejlesztői alkalmazások listáját a Galériából -galleryFeaturedAppError = Szerverhiba: nem sikerült letölteni a kiemelt alkalmazások listáját a Galériából -galleryTutorialAppError = Szerverhiba: nem sikerült letölteni az oktató alkalmazások listáját a Galériából -gallerySearchError = Szerverhiba: sikertelen keresés a Galériában -galleryRecentAppsError = Szerverhiba: nem sikerült letölteni a legújabb alkalmazások listáját a Galériából -galleryDownloadedAppsError = Szerverhiba: nem sikerült letölteni a legtöbbet letöltött alkalmazások listáját a Galériából -galleryLikedAppsError = Szerverhiba: nem sikerült letölteni a legnépszerűbb alkalmazások listáját -galleryDeleteError = Szerverhiba: sikertelen törlés a galériából -gallerySetProjectIdError = Szerverhiba: hiba történt az alkalmazás galéria azonosítójának beállításakor -projectUploadError = Szerverhiba: projekt feltöltése sikertelen. Próbáld újra később! -galleryNoExtensionsPlease = Nem tölthetsz fel olyan alkalmazást a Galériába amely kiegészítő komponenseket használ -notProjectArchiveError = A kiválasztott fájl nem egy projekt forrásfájl!\nA projekt forrásfájlok aia kiterjesztésűek. -loadingAppIndicatorText = Alkalmazás betöltése... -buttonEditProfile = Profil szerkesztése -buttonUpdateProfile = Módosítások mentése -labelEditYourProfile = Profil szerkesztése -labelYourDisplayName = A megjelenített neved -labelMoreInfoLink = További információk rólad (link) -labelEmailDescription = Az App Invetor rendszeresen üzenetet küld róla ha az alkalmazásodat kedvelik vagy letöltik. Itt meg tudod adni milyen gyakran szeretnél erről értesítést kapni. -labelEmailFrequencyPrefix = Kérek e-mailt minden -labelEmailFrequencySuffix = új lájk vagy letöltés esetén. -errorEmailFrequency = Ide egy pozitív egész számot kell beírnod -gallerySearchForAppsButton = Keresés az alkalmazások között -galleryMoreApps = További alkalmazások -gallerySearchResultsPrefix = a \" -gallerySearchResultsInfix = \" címre való keresés -gallerySearchResultsSuffix = darab eredménnyel tért vissza -galleryError = Szerverhiba: a Galéria nem elérhető -noResultsFound = Nincs találat -gallerySettingsError = Szerverhiba: a Galéria beállításai nem elérhetők -backButton = Vissza -nextButton = Következő -newYoungAndroidProjectWizardCaption = Új App Inventor projekt létrehozása -remixedYoungAndroidProjectWizardCaption = Az App Inventor projekt neve -projectNameLabel = Projekt neve: -malformedProjectNameError = A projekt neve betűvel kell hogy kezdődjön és csak betűket, számokat és aláhúzás karaktereket tartalmazhat -duplicateProjectNameError = Már létezik {0} nevű projekt. Nem hozhatsz létre projektet ugyanazzal a névvel. -whitespaceProjectNameError = A projekt neve nem tartalmazhat szóközt -firstCharProjectNameError = A projekt neve betűvel kell hogy kezdődjön -invalidCharProjectNameError = Hibás karakter. A projekt neve csak betűket, számokat és aláhúzás karaktereket tartalmazhat -projectWasUpgraded = A projekt az App Inventor egy régebbi verziójával készült és most frissítésre került\n{0} -unexpectedProblem = Hiba történt a projekt betöltésekor. {0} -newerVersionProject = A projektet az App Inventor egy újabb verziójával hozták létre. Megkíséreljük megnyitni, de előfordulhatnak kompatibilitási problémák. -veryOldProject = A projektet az App Inventor még ki nem adott verziójával hozták létre. Megkíséreljük megnyitni, de előfordulhatnak kompatibilitási problémák. -upgradeDetailLoggerReplacedWithNotifier = A {0} nevű Jegyzetelő (Logger) komponens típusa FelugróÜzenetre változott.\n -newerVersionComponentException = Nem sikerült betölteni a(z) {0} projektet (a projekt App Inventor verziója {1}, a legfrissebb ismert verzió viszont {2}). -noUpgradeStrategyException = Nem létezik frissítési stratégia a(z) {0} projekt számára ({1} verzióról {2} verzióra). -badAlignmentPropertyEditorForArrangement = Rendszerhiba: hibás érték a vízszintes vagy függőleges elrendezésre. -textReceivingChoiceOff = kikapcsolva -textReceivingChoiceForeground = csak ha előtérben az alkalmazás -textReceivingChoiceAlways = mindig -startingConnectionDialog = 0 elindul -loadingAsset = {0} erőforrás letöltése az App Inventor szerverről... -sendingAssetToCompanion = {0} küldése az AI Companion segédalkalmazásnak... -unableToCompile = Az App Inventor nem tudta lefordítani a projektet.
A fordító hibaüzenete:
{0}. -apkSavedToComputer = Az APK fájl a számítógép letöltési könyvtárába lesz másolva. -apkInstalledToPhone = Az APK fájl telepítésre kerül a készülékre. -waitingForBarcode = Várakozás a vonalkód megjelenésére. -preparingApplicationIcon = Alkalmazás ikon előkészítése -determiningPermissions = Szükséges engedélyek meghatározása -generatingApplicationInformation = Alkalmazás információ előállítása -compilingPart1 = Fordítás első része -compilingPart2 = Fordítás második része (kérlek várj) -preparingFinalPackage = Végső alkalmazás csomag előkészítése -buildingApk = APK felépítése -HTMLFormatProperties = HTML megjelenítés -userInterfaceComponentPallette = Felhasználói felület -layoutComponentPallette = Elrendezés -mediaComponentPallette = Média -drawingAndAnimationComponentPallette = Rajz és animáció -mapsComponentPallette = Térkép -sensorsComponentPallette = Érzékelők -socialComponentPallette = Közösségi (média) -storageComponentPallette = Adattárolás -forInternalUseOnlyComponentPallette = Csak belső használatra -formComponentPallette = Űrlap -builtinMathLabel = Matematika -connectivityComponentPallette = Hálózat -legoMindstormsComponentPallette = LEGO\u00AE MINDSTORMS\u00AE -extensionComponentPallette = Kiegészítők -externalComponentPalette = Külső komponensek -experimentalComponentPallette = Kísérleti jellegű -internalUseComponentPallette = Csak belső használatra -uninitializedComponentPallette = Nem inicializált -buttonComponentPallette = Gomb -canvasComponentPallette = Rajzvászon -checkBoxComponentPallette = Jelölőnégyzet -clockComponentPallette = Óra -datePickerComponentPallette = Dátumválasztó -imageComponentPallette = Kép -labelComponentPallette = Címke -listPickerComponentPallette = Teljes képernyős lista -listViewComponentPallette = Lista -passwordTextBoxComponentPallette = Jelszó bevitel -pedometerComponentPallette = Lépésszámláló -sliderComponentPallette = Csúszka -spinnerComponentPallette = Felugrólista -textBoxComponentPallette = Szövegbeviteli mező -timePickerComponentPallette = Időpontválasztó -tinyDBComponentPallette = TinyDB -camcorderComponentPallette = Videófelvevő -cameraComponentPallette = Kamera -imagePickerComponentPallette = Képválasztó -playerComponentPallette = Zenelejátszó -soundComponentPallette = Hanglejátszó -videoPlayerComponentPallette = Videólejátszó -yandexTranslateComponentPallette = Yandex fordító -ballComponentPallette = Labda -imageSpriteComponentPallette = Szereplő -contactPickerComponentPallette = Névjegyválasztó -emailPickerComponentPallette = E-mail cím választó -phoneCallComponentPallette = Telefonhívás -phoneNumberPickerComponentPallette = Telefonszám választó -phoneStatusComponentPallette = Telefon adatai -sharingComponentPallette = Megosztás -textingComponentPallette = SMS -twitterComponentPallette = Twitter -accelerometerSensorComponentPallette = Gyorsulásmérő -barcodeScannerComponentPallette = Vonalkód beolvasó -gyroscopeSensorComponentPallette = Giroszkóp -locationSensorComponentPallette = Helyzetérzékelő -mediaStoreComponentPallette = Médiatárhely -nearFieldComponentPallette = NFC -orientationSensorComponentPallette = Irányérzékelő -horizontalArrangementComponentPallette = Vízszintes elrendezés -horizontalScrollArrangementComponentPallette = Vízszintes görgethető elrendezés -tableArrangementComponentPallette = Táblázatos elrendezés -verticalArrangementComponentPallette = Függőleges elrendezés -verticalScrollArrangementComponentPallette = Függőleges görgethető elrendezés -nxtColorSensorComponentPallette = Nxt színérzékelő -nxtDirectCommandsComponentPallette = Nxt közvetlen parancs -nxtDriveComponentPallette = Nxt irányító -nxtLightSensorComponentPallette = Nxt fényérzékelő -nxtSoundSensorComponentPallette = Nxt hangérzékelő -nxtTouchSensorComponentPallette = Nxt érintésszenzor -nxtUltrasonicSensorComponentPallette = Nxt ultrahang érzékelő -ev3CommandsComponentPallette = Ev3 parancs -ev3UIComponentPallette = Ev3 grafika -ev3SoundComponentPallette = Ev3 hang -ev3MotorsComponentPallette = Ev3 motor -ev3TouchSensorComponentPallette = Ev3 érintésérzékelő -ev3ColorSensorComponentPallette = Ev3 színérzékelő -ev3GyroSensorComponentPallette = Ev3 giroszkóp -ev3UltrasonicSensorComponentPallette = Ev3 ultrahang érzékelő -activityStarterComponentPallette = Aktivitás indító -bluetoothClientComponentPallette = Bluetoth kliens -bluetoothServerComponentPallette = Bluetooth szerver -notifierComponentPallette = Felugró üzenet -speechRecognizerComponentPallette = Beszédfelismerő -textToSpeechComponentPallette = Szövegfelolvasó -tinyWebDBComponentPallette = TinyWebDB -webComponentPallette = Internet -fileComponentPallette = Fájl -firebaseDBComponentPallette = Firebase adatbázis -fusiontablesControlComponentPallette = Fusion tábla vezérlés -gameClientComponentPallette = Játék kliens -passwordParams = jelszó -soundRecorderComponentPallette = Hangrögzítő -votingComponentPallette = Szavazás -webViewerComponentPallette = Webböngésző -AboutScreenProperties = Névjegy ablak -ShowStatusBarProperties = Állapot sor látható -TitleVisibleProperties = Cím látható -AboveRangeEventEnabledProperties = Érzékelési tartomány feletti érték esemény bekapcsolva -ActionProperties = Akció -ActivityClassProperties = Aktivitás osztály -ActivityPackageProperties = Aktivitás csomagja -AlignHorizontalProperties = Vízszintes igazítás -AlignVerticalProperties = Függőleges igazítás -AllowCookiesProperties = Sütik engedélyezése -ApiKeyProperties = API kulcs -AppNameProperties = Alkalmazás neve -AvailableCountriesProperties = Elérhető országok -AvailableLanguagesProperties = Elérhető nyelvek -BackgroundColorProperties = Háttérszín -BackgroundImageProperties = Háttérkép -BelowRangeEventEnabledProperties = Érzékelési tartomány alatti érték esemény bekapcsolva -BluetoothClientProperties = Bluetooth kliens -BottomOfRangeProperties = Érzékelési tartomány alsó határa -CalibrateStrideLengthProperties = Lépéshossz kalibrálás -CharacterEncodingProperties = Karakterkódolás -CheckedProperties = Bekapcsolt -CloseScreenAnimationProperties = Képernyő animáció bezárása -ColorChangedEventEnabledProperties = Színváltozás esemény engedélyezve -ColumnsProperties = Oszlopok száma -ConsumerKeyProperties = Felhasználói kulcs -ConsumerSecretProperties = Titkos kulcs -CountryProperties = Ország -DataTypeProperties = Adattípus -DataUriProperties = Adat URI -DelimiterByteProperties = Elválasztó bájt -DetectColorProperties = Színek érzékelése -DistanceIntervalProperties = Frissítéshez szükséges minimális távolság -DriveMotorsProperties = Motor portok -EnabledProperties = Engedélyezett -ExtraKeyProperties = Extra kulcs -ExtraValueProperties = Extra érték -ExtrasProperties = Extra értékek -FollowLinksProperties = Hivatkozások engedélyezése -FontBoldProperties = Félkövér betűtípus -FontItalicProperties = Dőlt betűtípus -FontSizeProperties = Betűméret -FontTypefaceProperties = Betűtípus -GameIdProperties = Játékazonosító -GenerateColorProperties = Generált szín -GenerateLightProperties = Generált fény -GoogleVoiceEnabledProperties = Google Asszisztens engedélyezve -HasMarginsProperties = Van margója -HeadingProperties = Irány -HighByteFirstProperties = Magasabb helyi értékű bájtok álljanak elöl -HintProperties = Segítség/Tipp -HomeUrlProperties = Kezdőoldal URL -IconProperties = Ikon -InstantProperties = Pillanat -IgnoreSslErrorsProperties = SSL hibák mellőzése -ImageProperties = Kép forrása -IntervalProperties = Intervallum -IsLoopingProperties = Ismétlés -KeyFileProperties = Kulcsfájl -LanguageProperties = Nyelv -LineWidthProperties = Vonalvastagság -LoadingDialogMessageProperties = Párbeszéd üzenet betöltése -MessageProperties = Üzenet -MinimumIntervalProperties = Minimális frissítési intervallum (ms) -MultiLineProperties = Többsoros -NamespaceProperties = Névtér -NumbersOnlyProperties = Csak számok -OpenScreenAnimationProperties = Nyitó képernyő animáció -PaintColorProperties = Rajzolási szín -PhoneNumberProperties = Telefonszám -phoneNumberParams = Telefonszám -PhoneNumberListProperties = Telefonszám lista -PictureProperties = Kép -PressedEventEnabledProperties = Lenyomás esemény engedélyezve -PromptforPermissionProperties = Földrajzi helyzet engedély kérése -QueryProperties = Lekérdezés -RadiusProperties = Sugár -ReadModeProperties = Olvasás mód -ReceivingEnabledProperties = Üzenet fogadási mód -ReleasedEventEnabledProperties = Elengedés esemény engedélyezve -ResponseFileNameProperties = Elmentett HTTP válasz fájl neve -ResultNameProperties = Eredmény neve -RowsProperties = Sorok száma -SavedRecordingProperties = Hangfelvétel elérési útja -SaveResponseProperties = HTTP válasz elmentése fájlba -ScalePictureToFitProperties = Képarányos átméretezés -SensorPortProperties = Érzékelő port -ScreenOrientationProperties = Képernyőirány -SecureProperties = Biztonságos kapcsolat -ServiceAccountEmailProperties = Szolgáltatási e-mail cím -ServiceURLProperties = Szolgáltatás URL -ShowLoadingDialogProperties = Párbeszéd betöltést megmutat -FirebaseURLProperties = Firebase URL -PersistProperties = Offline működés -ProjectBucketProperties = Projekt konténer neve -DeveloperBucketProperties = Fejlesztői konténer neve -FirebaseTokenProperties = Firebase Token -PrivateUserStorageProperties = Privát felhasználói tárhely -ScrollableProperties = Görgethető -ShapeProperties = Alak -ShowFeedbackProperties = Animált kattintás -ShowTablesProperties = táblázatok mutatása -SourceProperties = Forrás -SpeedProperties = Sebesség -StopBeforeDisconnectProperties = Kapcsolat bontása előtt álljon le a motor -StopDetectionTimeoutProperties = Megállási idő -StrideLengthProperties = Lépéshossz -TextProperties = Szöveg -TextAlignmentProperties = Szöveg vízszintes igazítás -TextColorProperties = Szövegszín -TimerAlwaysFiresProperties = Háttérben is működik -TimerEnabledProperties = Időzítő bekapcsolva -TimerIntervalProperties = Időzítő intervallum -TitleProperties = Cím -TopOfRangeProperties = Érzékelési tartomány felső határa -UrlProperties = URL -UseFrontProperties = Elülső kamera használata -UseGPSProperties = GPS használata -UseServiceAuthenticationProperties = Belépés szolgáltatási e-mail címmel -UsesLocationVisibleProperties = Felhasználó földrajzi helyzete látható -VersionCodeProperties = Verzió kód -VersionNameProperties = Verzió név -TutorialURLProperties = Oktatási segédlet URL -SizingProperties = Képernyő méretezés -ShowListsAsJsonProperties = Listák megjelenítése JSON formátumban -VisibleProperties = Látható -VolumeProperties = Hangerő -WheelDiameterProperties = Kerék átmérő -WithinRangeEventEnabledProperties = Érzékelési tartományon belüli érték esemény bekapcsolva -XProperties = X -YProperties = Y -ZProperties = Z -VisibilityShowingProperties = látható -VisibilityHiddenProperties = rejtett -ElementsFromStringProperties = Lista elemek mint szöveg -RotatesProperties = Képes forgásra -RotationAngleProperties = Forgásszög -SelectionProperties = Kiválasztott elem -TimeIntervalProperties = Frissítéshez szükséges minimális idő -UsesLocationProperties = Földrajzi helyzet használata -ShowFilterBarProperties = Lista szűrés bekapcsolva -TextSizeProperties = Szövegméret -NotifierLengthProperties = Megjelenési idő -LoopProperties = Lejátszás automatikus újraindítása -PitchProperties = Y elfordulás -SpeechRateProperties = Beszéd tempó -SensitivityProperties = Érzékenység -TwitPic_API_KeyProperties = TwitPic API kulcs -PromptProperties = Cím -ColorLeftProperties = Csúszka baloldali színe -ColorRightProperties = Csúszka jobboldali színe -MaxValueProperties = Maximum érték -MinValueProperties = Minimum érték -ThumbPositionProperties = Csúszka érték -ThumbEnabled = Engedélyezett -DayProperties = Nap -MonthProperties = Hónap -MonthInTextProperties = Hónap neve -YearProperties = Év -LastMessageProperties = Utolsó üzenet -TextToWriteProperties = Elküldendő üzenet -WriteTypeProperties = Írási mód -ElapsedTimeProperties = Eltelt idő -SimpleStepsProperties = Lépések száma -WalkStepsProperties = Előre lépések száma -MovingProperties = Mozgásban van -HourProperties = Óra -MinuteProperties = Perc -DistanceProperties = Távolság -DirectMessagesProperties = Közvetlen üzenetek -ContactNameProperties = Névjegy név -CurrentAddressProperties = Jelenlegi cím -CurrentPageTitleProperties = Jelenlegi oldal címe -CurrentUrlProperties = Jelenlegi URL -AccuracyProperties = Pontosság -AddressesAndNamesProperties = Párosított nevek és címek -AltitudeProperties = Magasság -AngleProperties = Szög -AnimationProperties = Animáció -AvailableProperties = Elérhető -AvailableProvidersProperties = Elérhető szolgáltatók -AzimuthProperties = Z elfordulás -BallotOptionsProperties = Szavazás beállítások -BallotQuestionProperties = Szavazás tárgya -ContactUriProperties = Névjegy URI -EmailAddressProperties = E-mail cím -EmailAddressListProperties = E-mail címlista -ElementsProperties = Lista elemek -FollowersProperties = Követők -FriendTimelineProperties = Barátok üzenetei -FullScreenProperties = Teljes képernyős -HasAccuracyProperties = Van pontossága -HasAltitudeProperties = Van magassága -HasLongitudeLatitudeProperties = Van hosszúsága és szélessége -HeightProperties = Magasság -HeightPercentProperties = Magasság százalék -InstanceIdProperties = Példány azonosító -InvitedInstancesProperties = Meghívott példányok -IsAcceptingProperties = Kapcsolódásra vár -IsConnectedProperties = Kapcsolódott -IsPlayingProperties = Tart a lejátszás -JoinedInstancesProperties = Csatlakozott példányok -LatitudeProperties = Szélesség -LeaderProperties = Vezető -LongitudeProperties = Hosszúság -MagnitudeProperties = Lejtési sebesség -MentionsProperties = Említések -PasswordVisibleProperties = Jelszó látható -ProviderLockedProperties = Szolgáltató zárolva -ProviderNameProperties = Szolgáltató neve -PublicInstancesProperties = Nyilvános példányok -PlayOnlyInForegroundProperties = Lejátszás csak akkor, ha az alkalmazás előtérben van -PlayersProperties = Játékosok -RequestHeadersProperties = HTTP Kérés fejléc értékek -ResultProperties = Eredmény -UseExternalScannerProperties = Külső beolvasó program használata -ResultTypeProperties = Eredmény típusa -ResultUriProperties = Eredmény URI -RollProperties = X elfordulás -ScalingProperties = Képméretezés -SearchResultsProperties = Keresés eredményei -ServiceUrlProperties = Szolgáltatás URL -SelectionIndexProperties = Kiválasztott elem indexe -uriParams = URI -UserChoiceProperties = Felhasználó választása -UserEmailAddressProperties = Felhasználó e-mail cím -UserIdProperties = Felhasználó azonosító -UsernameProperties = Felhasználónév -usernameParams = felhasználónév -XAccelProperties = X gyorsulás -XAngularVelocityProperties = X szögsebesség -YAccelProperties = Y gyorsulás -YAngularVelocityProperties = Y szögsebesség -ZAccelProperties = Z gyorsulás -ZAngularVelocityProperties = Z Szögsebesség -WidthProperties = Szélesség -WidthPercentProperties = Szélesség százalék -WebViewStringProperties = Web nézet szöveg -WebViewStringChangeEvents = Web nézet szöveg változás -EnableSpeedRegulationProperties = Sebesség szabályozás -ModeProperties = Működési mód -MotorPortsProperties = Motor portok -ReverseDirectionProperties = Visszafelé mozog -SensorValueChangedEventEnabledProperties = Érzékelővel mért érték változott esemény engedélyezve -TachoCountChangedEventEnabledProperties = Tachométer érték változott esemény engedélyezve -UnitProperties = Egység -xAccelParams = x gyorsulás -yAccelParams = y gyorsulás -zAccelParams = z gyorsulás -resultParams = eredmény -tableIdParams = táblázat azonosító -columnsParams = oszlopok -conditionsParams = feltételek -valuesParams = értékek -otherParams = másik -componentParams = komponens -startXParams = start X -startYParams = start Y -prevXParams = előző X -prevYParams = előző Y -currentXParams = jelenlegi X -currentYParams = jelenlegi Y -edgeParams = oldal -speedParams = sebesség -headingParams = irány -xvelParams = x sebesség -yvelParams = y sebesség -targetParams = cél -addressParams = cím -uuidParams = UUID -numberOfBytesParams = bájtok száma -numberParams = szám -listParams = lista -textParams = szöveg -clipParams = videófájl elérési útja -imageParams = kép -draggedSpriteParams = elhúzott szereplő -draggedAnySpriteParams = van elhúzott szereplő -flungSpriteParams = elhajított szereplő -touchedSpriteParams = megérintett szereplő -touchedAnySpriteParams = van megérintett szereplő -xParams = x -yParams = y -centerXParams = középpont X -centerYParams = középpont Y -rParams = r -radiusParams = sugár -x1Params = x1 -x2Params = x2 -y1Params = y1 -y2Params = y2 -angleParams = szög -fileNameParams = fájlnév -colorParams = szín -yearParams = év -monthParams = hónap -dayParams = nap -hourParams = óra -minuteParams = perc -instantParams = pillanat -daysParams = nap -hoursParams = óra -minutesParams = perc -monthsParams = hónap -secondsParams = másodperc -weeksParams = hét -quantityParams = mennyiség -durationParams = időtartam -patternParams = minta -yearsParams = év -InstantInTimeParams = Időpillanat -fromParams = kezdő időpont -millisParams = ezredmásodperc -functionNameParams = függvénynév -permissionNameParams = engedélynév -errorNumberParams = hibaszám -messageParams = üzenet -mediafileParams = médiafájl paraméterek -otherScreenNameParams = másik képernyő neve -animTypeParams = animáció típusa -senderParams = küldő -contentsParams = tartalom -instanceIdParams = példány azonosító -playerIdParams = játékos azonosító -commandParams = parancs -argumentsParams = paraméter -responseParams = válasz -emailAddressParams = e-mail cím -typeParams = típus -countParams = mennyiség -makePublicParams = publikussá tesz -recipientsParams = címzettek -playerEmailParams = játékos e-mail -latitudeParams = szélességi fok -longitudeParams = hosszúsági fok -altitudeParams = magasság -providerParams = szolgáltató -statusParams = állapot -locationNameParams = hely neve -choiceParams = választás -noticeParams = üzenet -titleParams = cím -buttonTextParams = gomb szövege -cancelableParams = van mégse gomb -button1TextParams = első gomb szövege -button2TextParams = második gomb szövege -sourceParams = forrás -destinationParams = cél -sensorPortLetterParams = érzékelő port betűje -rxDataLengthParams = rx adat hossz -wildcardParams = fájlnév helyettesítő karakterekkel -motorPortLetterParams = motorport betűje -mailboxParams = levelezési fiók -durationMsParams = időtartam ezredmásodpercben -relativeParams = relatív -sensorTypeParams = érzékelő típus -sensorModeParams = érzékelő üzemmód -powerParams = sebesség -modeParams = üzemmód -regulationModeParams = szabályozási mód -turnRatioParams = fordulási arány -runStateParams = mozgási állapot -tachoLimitParams = tachométer határ -programNameParams = program neve -distanceParams = távolság -azimuthParams = z elfordulás -pitchParams = y elfordulás -rollParams = x elfordulás -simpleStepsParams = lépések száma -walkStepsParams = lépések száma -seedParams = mag -rendezvousServerParams = randi szerver -millisecsParams = ezredmásodpercek -soundParams = hang -messageTextParams = üzenet -tagParams = címke -valueParams = érték -valueToStoreParams = tárolandó érték -valueToAddParams = hozzáadandó érték -tagFromWebDBParams = címke -valueFromWebDBParams = érték -followers2Params = követők -timelineParams = legutóbbi üzenetek -mentionsParams = említések -searchResultsParams = keresési eredmények -userParams = felhasználó -urlParams = URL -responseCodeParams = válaszkód -responseTypeParams = válasz típusa -responseContentParams = válasz tartalma -htmlTextParams = HTML szöveg -jsonTextParams = JSON szöveg -pathParams = elérési út -encodingParams = szöveg kódolás -xmlTextParams = XML szöveg -nameParams = név -serviceNameParams = szolgáltatás neve -millisecondsParams = ezredmásodpercek -messagesParams = üzenetek -startParams = kezdete -endParams = vége -frequencyHzParams = frekvencia Hz -secureParams = biztonságos -fileParams = fájl -thumbPositionParams = csúszka érték -selectionParams = kiválasztott elem -valueIfTagNotThereParams = érték ha címke nem található -queryParams = keresési szöveg -imagePathParams = kép útvonal -msParams = ezredmásodperc -translationParams = fordítás -languageToTranslateToParams = célnyelv -textToTranslateParams = lefordítandó szöveg -xAngularVelocityParams = x szögsebesség -yAngularVelocityParams = y szögsebesség -zAngularVelocityParams = z szögsebesség -timestampParams = időbélyeg -colorCodeParams = színkód -colorNameParams = színneve -fillParams = kitöltés -frequencyParams = frekvencia -heightParams = magasság -noParams = sorszám -rateParams = ráta -sensorValueParams = érzékelő érték -tachoCountParams = tachométer érték -tachoCountsParams = tachométer értékek -useBrakeParams = fék használata -volumeParams = hangerő -widthParams = szélesség -AccelerationChangedEvents = Gyorsulás megváltozott -ActivityCanceledEvents = Aktivitást megszakították -AfterActivityEvents = Aktivitás befejeződött -CollidedWithEvents = Ütközött egy másik szereplővel -DraggedEvents = Arrébb húzták -EdgeReachedEvents = Elérte a rajzvászon szélét -FlungEvents = Elhajították -NoLongerCollidingWithEvents = Már nem ütközik a másik szereplővel -TouchDownEvents = Lenyomták -TouchUpEvents = Felengedték -TouchedEvents = Megérintették -AfterScanEvents = Vonalkód beolvasása megtörtént -ConnectionAcceptedEvents = Kapcsolódás megtörtént -ClickEvents = Kattintottak -GotFocusEvents = Fókuszba került -LongClickEvents = Hosszan kattintottak -RequestFocusMethods = Kerüljön fókuszba -LostFocusEvents = Elvesztette a fókuszt -ViewContactMethods = Névjegy megtekintése -AfterRecordingEvents = Elkészült a felvétel -AfterPictureEvents = Elkészült a fotó -ChangedEvents = Megváltozott -TimerEvents = Időzítőesemény -AfterPickingEvents = Elem ki lett választva -BeforePickingEvents = Lista elemek meg fognak jelenni -BackPressedEvents = Vissza gomb le lett nyomva -ErrorOccurredEvents = Hiba történt -InitializeEvents = Alkalmazás elindult -OtherScreenClosedEvents = Másik képernyő bezárult -PermissionDeniedEvents = Engedély megtagadva -PermissionGrantedEvents = Engedély megadva -ScreenOrientationChangedEvents = Képernyő iránya megváltozott -GotResultEvents = Megérkezett a lekérdezés eredménye -FunctionCompletedEvents = Befejeződött -GotMessageEvents = Üzenet érkezett -InfoEvents = Információ -InstanceIdChangedEvents = példány azonosító megváltozott -InvitedEvents = Meghívót kapott -NewInstanceMadeEvents = Új példány létrejött -NewLeaderEvents = Új vezető lett megválasztva -PlayerJoinedEvents = Új játékos csatlakozott -PlayerLeftEvents = Játékos távozott -ServerCommandFailureEvents = Szerverparancs hiba -ServerCommandSuccessEvents = Szerverparancs sikeresen végrehajtódott -UserEmailAddressSetEvents = Felhasználó e-mail címe be lett állítva -WebServiceErrorEvents = Webszolgáltatás hiba -FirebaseErrorEvents = Firebase hiba -LocationChangedEvents = Helyzet megváltozott -StatusChangedEvents = Állapot változott -AfterChoosingEvents = Megtörtént a választás -AfterTextInputEvents = Megtörtént a szövegbevitel -ChoosingCanceledEvents = Kiválasztás megszakítva -TextInputCanceledEvents = Szövegbevitel megszakítva -AboveRangeEvents = Érzékelési tartomány feletti érték -BelowRangeEvents = Érzékelési tartomány alatti érték -ColorChangedEvents = Szín megváltozott -WithinRangeEvents = Érzékelési tartományon belüli érték -PressedEvents = Lenyomták -ReleasedEvents = Felengedték -OrientationChangedEvents = Készülék iránya változott -CalibrationFailedEvents = Kalibráció nem sikerült -GPSAvailableEvents = GPS elérhetővé vált -GPSLostEvents = GPS jel elveszett -SimpleStepEvents = Egy lépés -StartedMovingEvents = Mozgás elindult -StoppedMovingEvents = Mozgás megállt -WalkStepEvents = Előre lépés -CompletedEvents = Befejeződött -AfterSoundRecordedEvents = Hangfelvétel elkészült -StartedRecordingEvents = Hangrögzítés elindult -StoppedRecordingEvents = Hangrögzítés megállt -AfterGettingTextEvents = Beszédfelismerés befejeződött -BeforeGettingTextEvents = Beszédfelismerés elkezdődött -AfterSpeakingEvents = Felolvasás véget ért -BeforeSpeakingEvents = Felolvasás el fog kezdődni -MessageReceivedEvents = Üzenet érkezett -SendMessageEvents = Üzenet küldése -GotValueEvents = Megérkezett a lekérdezés eredménye -TagListEvents = Címke lista megérkezett -ValueStoredEvents = Adat írása befejeződött -DataChangedEvents = Adat megváltozott -DirectMessagesReceivedEvents = Közvetlen üzenet érkezett -FollowersReceivedEvents = Követők listája megérkezett -FriendTimelineReceivedEvents = Barátok legutóbbi üzenetei megérkeztek -IsAuthorizedEvents = Sikeresen bejelentkezett -MentionsReceivedEvents = Említések listája megérkezett -SearchSuccessfulEvents = Keresés sikeresen befejeződött -GotBallotEvents = Van szavazás -GotBallotConfirmationEvents = Megérkezett a szavazatod -NoOpenPollEvents = Nincs szavazás -GotFileEvents = Fájl letöltés befejeződött -GotTextEvents = Szöveges tartalom beolvasása befejeződött -AfterFileSavedEvents = Fájl írása befejeződött -AfterDateSetEvents = Dátum ki lett választva -TagReadEvents = Üzenet érkezett -TagWrittenEvents = Üzenet el lett küldve -PositionChangedEvents = Pozíció megváltozott -AfterSelectingEvents = Lista elem ki lett választva -AfterTimeSetEvents = Időpont ki lett választva -GotTranslationEvents = Elkészült a fordítás -ShakingEvents = Rázkódik -GyroscopeChangedEvents = Giroszkóp által mért értékek megváltoztak -TachoCountChangedEvents = Tachométer érték megváltozott -SensorValueChangedEvents = Érzékelt érték megváltozott -ResolveActivityMethods = Elérhető aktivitás nevének lekérdezése -StartActivityMethods = Aktivitás indítása -ConnectMethods = Kapcsolódás -ConnectWithUUIDMethods = Kapcsolódás UUID azonosítóval -DisconnectMethods = Kapcsolat bontása -IsDevicePairedMethods = Össze van-e párosítva -ReceiveSigned1ByteNumberMethods = Fogadás előjeles 1 bájtból szám -ReceiveSigned2ByteNumberMethods = Fogadás előjeles 2 bájtból szám -ReceiveSigned4ByteNumberMethods = Fogadás előjeles 4 bájtból szám -ReceiveSignedBytesMethods = Fogadás előjeles bájtok -ReceiveTextMethods = Fogadás szöveg -ReceiveUnsigned1ByteNumberMethods = Fogadás előjel nélküli 1 bájtból szám -ReceiveUnsigned2ByteNumberMethods = Fogadás előjel nélküli 2 bájtból szám -ReceiveUnsigned4ByteNumberMethods = Fogadás előjel nélküli 4 bájtból szám -ReceiveUnsignedBytesMethods = Fogadás előjel nélküli bájtok -Send1ByteNumberMethods = Küldés 1 bájtból szám -Send2ByteNumberMethods = Küldés 2 bájtból szám -Send4ByteNumberMethods = Küldés 4 bájtból szám -SendBytesMethods = Küldés 1 bájt -SendTextMethods = Küldés szöveg -AcceptConnectionMethods = Kapcsolódási kísérlet fogadása -AcceptConnectionWithUUIDMethods = Kapcsolódási kísérlet fogadása UUID-vel -BytesAvailableToReceiveMethods = Érkezett bájtok száma -StopAcceptingMethods = Üzenet fogadás befejezése -RecordVideoMethods = Készíts felvételt -TakePictureMethods = Készíts fotót -ClearMethods = Törlés -DrawCircleMethods = Kör rajzolás -DrawLineMethods = Vonal rajzolás -DrawPointMethods = Pont rajzolás -DrawTextMethods = Szöveg rajzolás -DrawTextAtAngleMethods = Elforgatott szöveg rajzolás -GetBackgroundPixelColorMethods = Háttér képpont színének lekérdezése -GetPixelColorMethods = Képpont színének lekérdezése -SaveMethods = Mentés -SaveAsMethods = Mentés másként -SetBackgroundPixelColorMethods = Háttér képpont kiszínezése -AddDurationMethods = Időtartam hozzáadása -AddDaysMethods = Napok hozzáadása -AddHoursMethods = Órák hozzáadása -AddMinutesMethods = Percek hozzáadása -AddMonthsMethods = Hónapok hozzáadása -AddSecondsMethods = Másodpercek hozzáadása -AddWeeksMethods = Hetek hozzáadása -AddYearsMethods = Évek hozzáadása -DayOfMonthMethods = Hónap hányadik napja -DurationMethods = Időtartam -DurationToSecondsMethods = Eltelt időből másodpercek -DurationToMinutesMethods = Eltelt időből percek -DurationToHoursMethods = Eltelt időből órák -DurationToDaysMethods = Eltelt időből napok -DurationToWeeksMethods = Eltelt időből hetek -FormatDateMethods = Dátum szöveggé alakítása -FormatDateTimeMethods = Dátum és idő szöveggé alakítása -FormatTimeMethods = Idő szöveggé alakítása -GetMillisMethods = Ezredmásodpercekre váltás -HourMethods = Óra -InstantMethods = Pillanat érték -MakeInstantMethods = Pillanat érték létrehozása -MakeInstantFromMillisMethods = Pillanat érték létrehozása ezredmásodpercekből -MinuteMethods = Perc -MonthMethods = Hónap -MonthNameMethods = Hónap neve -NowMethods = Most -SecondMethods = Másodperc -SystemTimeMethods = Rendszeridő -WeekdayMethods = Hét hányadik napja -WeekdayNameMethods = Nap neve -YearMethods = Év -OpenMethods = Megnyitás -CloseScreenAnimationMethods = Záró animáció típusa -OpenScreenAnimationMethods = Nyitó animáció típusa -DoQueryMethods = Fusion table parancs -ForgetLoginMethods = Kijelentkezés -SendQueryMethods = Lekérdezés elküldése -GetInstanceListsMethods = Példányok lekérdezése -GetMessagesMethods = Üzenetek lekérdezése -InviteMethods = Meghívás -LeaveInstanceMethods = Példány elhagyása -MakeNewInstanceMethods = Új példány létrehozása -ServerCommandMethods = Szerver parancs küldése -SetInstanceMethods = Példány beállítása -SetLeaderMethods = Vezető kinevezése -BounceMethods = Pattanj vissza -CollidingWithMethods = Ütköznek-e -MoveIntoBoundsMethods = Helyezkedj a rajzvászon belsejébe -MoveToMethods = Ugorj helyre -PointInDirectionMethods = Nézz egy megadott pont irányába -PointTowardsMethods = Nézz egy célszereplő irányába -LatitudeFromAddressMethods = Cím hosszúsági foka -LongitudeFromAddressMethods = Cím szélességi foka -LogErrorMethods = Hibaüzenet naplózása -LogInfoMethods = Információ üzenet naplózása -LogWarningMethods = Figyelmeztető üzenet naplózása -ShowAlertMethods = Ideiglenes figyelmeztető ablak -ShowChooseDialogMethods = Választás ablak megjelenítése -ShowMessageDialogMethods = Szöveges üzenet ablak megjelenítése -ShowTextDialogMethods = Szövegbevitel ablak megjelenítése -ShowProgressDialogMethods = Folyamatábrázoló ablak megjelenítése -DismissProgressDialogMethods = Folyamatábrázoló ablak eltüntetése -GetColorMethods = Szín lekérdezése -GetLightLevelMethods = Fényerő lekérdezése -DeleteFileMethods = Fájl törlése -DownloadFileMethods = Fájl letöltése -GetBatteryLevelMethods = Akkumulátor töltöttségi szint lekérdezése -GetBrickNameMethods = Tégla név lekérdezése -GetCurrentProgramNameMethods = Aktuális program nevének lekérdezése -GetFirmwareVersionMethods = Firmware verzió lekérdezése -GetInputValuesMethods = Szenzor bemeneti értékek lekérdezése -GetOutputStateMethods = Motor kimeneti állapotának lekérdezése -KeepAliveMethods = Maradj ébren -ListFilesMethods = Fájlok listázása -LsGetStatusMethods = Beolvasásra váró bájtok száma -LsReadMethods = Beolvasás portról -MessageReadMethods = Üzenet olvasása -MessageWriteMethods = Üzenet írása -PlaySoundFileMethods = Hangfájl lejátszása -PlayToneMethods = Tónus lejátszása -ResetInputScaledValueMethods = Érzékelő bemenet alaphelyzetbe állítása -ResetMotorPositionMethods = Motor alaphelyzetbe állítása -SetBrickNameMethods = Tégla név beállítása -SetInputModeMethods = Érzékelő bemeneti mód beállítása -SetOutputStateMethods = Kimeneti állapot beállítása -StartProgramMethods = Program indítása -StopProgramMethods = Program leállítása -StopSoundPlaybackMethods = Hanglejátszás leállítása -LsWriteMethods = Írás portra -MoveBackwardMethods = Tolatás -MoveBackwardIndefinitelyMethods = Tolatás meghatározatlan ideig -MoveForwardMethods = Mozgás előre -MoveForwardIndefinitelyMethods = Mozgás előre meghatározatlan ideig -StopMethods = Megállás -TurnClockwiseIndefinitelyMethods = Fordulás óramutató járásával megegyező irányban -TurnCounterClockwiseIndefinitelyMethods = Fordulás óramutató járásával ellentétes irányban -GetSoundLevelMethods = Hangerő lekérdezése -IsPressedMethods = Le van nyomva -GetDistanceMethods = Távolság lekérdezése -PauseMethods = Megállítás -ResetMethods = Újrakezdés -ResumeMethods = Folytatás -StartMethods = Indítás -MakePhoneCallMethods = Telefonhívás indítása -GetWifiIpAddressMethods = Wifi IP cím lekérdezése -isConnectedMethods = csatlakozvaVan -setHmacSeedReturnCodeMethods = HMAC mag visszatérési kód beállítása -startHTTPDMethods = HTTPD indítása -VibrateMethods = Rezgetés -GetTextMethods = Beszédfelismerés -HideKeyboardMethods = Billentyűzet elrejtése -AskForPermissionMethods = Engedély kérése -SpeakMethods = Felolvasás -SendMessageMethods = Üzenetküldés -GetValueMethods = Adat lekérdezése -StoreValueMethods = Adat írása -GetTagListMethods = Címke lista lekérdezése -AppendValueMethods = Új elem beillesztése -RemoveFirstMethods = Első elem törlése -AppendValueToListMethods = Elem hozzáadása listához -RemoveFirstFromListMethods = Első lista elem törlése -FirstRemovedEvents = Első elem el lett távolítva -InitializeValueMethods = Kezdő értékadás -AuthorizeMethods = Bejelentkezés -CheckAuthorizedMethods = Be van-e jelentkezve -DeAuthorizeMethods = Kiléptetés -DirectMessageMethods = Közvetlen üzenet küldés -FollowMethods = Követés -RequestDirectMessagesMethods = Közvetlen üzenetek lekérdezése -RequestFollowersMethods = Követők lekérdezése -RequestFriendTimelineMethods = Barátok üzeneteinek lekérdezése -RequestMentionsMethods = Említések lekérdezése -SearchTwitterMethods = Twitter keresés -SetStatusMethods = Státusz beállítása -StopFollowingMethods = Követés leállítása -GetDurationMethods = Videó hosszának lekérdezése -SeekToMethods = Ugrás -DoScanMethods = Vonalkód beolvasás -RequestBallotMethods = Szavazás kérvényezése -SendBallotMethods = Szavazási adatok küldése -BuildPostDataMethods = Feltöltési adatok felépítése -ClearCookiesMethods = Sütik törlése -GetMethods = Letöltés (GET) -HtmlTextDecodeMethods = HTML szöveg dekódolása -JsonTextDecodeMethods = JSON szöveg dekódolása -xmlTextDecodeMethods = XML szöveg dekódolása -PostFileMethods = Fájl küldése (POST) -PostTextMethods = Szöveg küldése (POST) -PostTextWithEncodingMethods = Szöveg küldése kódolással (POST) -UriEncodeMethods = URI kódolás -UriDecodeMethods = URI dekódolás -CanGoBackMethods = Vissza tud lépni -CanGoForwardMethods = Előre tud lépni -ClearLocationsMethods = Elmentett földrajzi helyek törlése -ClearCachesMethods = Gyorsítótár törlése -GoBackMethods = Visszalépés -GoForwardMethods = Előrelépés -GoHomeMethods = Kezdőlapra ugrás -GoToUrlMethods = Weboldal betöltése -AppendToFileMethods = Hozzáfűzés fájl végéhez -DeleteMethods = Törlés -ReadFromMethods = Fájlból olvasás -SaveFileMethods = Fájl mentése -doFaultMethods = hiba -getVersionNameMethods = verziónév -installURLMethods = telepítési URL -isDirectMethods = közvetlen -setAssetsLoadedMethods = betöltendő erőforrások -shutdownMethods = leállítás -ShareFileMethods = Fájl megosztása -ShareFileWithMessageMethods = Fájl megosztása üzenettel -ShareMessageMethods = Üzenet megosztása -PlayMethods = Lejátszás -DisplayDropdownMethods = Lista megjelenítése -ClearAllMethods = Minden adat törlése -ClearTagMethods = Adat törlése -GetTagsMethods = Címkék lekérdezése -TweetMethods = Tweet -TweetWithImageMethods = Tweet képpel -BuildRequestDataMethods = Szöveges HTTP kérés előállítása -PutFileMethods = Fájl feltöltés (PUT) -PutTextMethods = Szöveg feltöltés (PUT) -PutTextWithEncodingMethods = Szöveg feltöltés kódolással (PUT) -RequestTranslationMethods = Fordítás elindítása -GetBatteryCurrentMethods = Akkumulátor áram lekérdezése -GetBatteryVoltageMethods = Akkumulátor feszültségszint lekérdezése -GetHardwareVersionMethods = Hardver verzió lekérdezése -SetAngleModeMethods = Orientáció mérési üzemmód beállítása -SetRateModeMethods = Szögsebesség mérési üzemmód beállítása -SetCmUnitMethods = Centiméter mértékegység beállítása -SetInchUnitMethods = Hüvelyk mértékegység beállítása -SetColorModeMethods = Színérzékelési mód beállítása -SetReflectedModeMethods = Reflektált fényérzékelési mód beállítása -SetAmbientModeMethods = Környező fényérzékelési mód beállítása -RotateIndefinitelyMethods = Forgás meghatározatlan ideig -RotateInDistanceMethods = Forgás távolság alapján -RotateInDurationMethods = Forgás időtartam alapján -RotateInTachoCountsMethods = Forgás tachométer érték alapján -RotateSyncIndefinitelyMethods = Forgás azonos sebességgel meghatározatlan ideig -RotateSyncInDistanceMethods = Forgás azonos sebességgel távolság alapján -RotateSyncInDurationMethods = Forgás azonos sebességgel időtartam alapján -RotateSyncInTachoCountsMethods = Forgás azonos sebességgel tachométer érték alapján -ToggleDirectionMethods = Irányváltoztatás -GetTachoCountMethods = Tachométer érték lekérdezése -ResetTachoCountMethods = Tachométer alaphelyzetbe állítása -GetSensorValueMethods = Érzékelő érték lekérdezése -GetColorCodeMethods = Színkód lekérdezése -GetColorNameMethods = Szín nevének lekérdezése -FillScreenMethods = Képernyő kitöltése -DrawRectMethods = Téglalap rajzolás -DrawIconMethods = Ikon rajzolás -GetOSVersionMethods = Operációs rendszer verzió lekérdezése -GetOSBuildMethods = Operációs rendszer építési számának lekérdezése -GetFirmwareBuildMethods = Firmware építési számának lekérdezése -SetPowerMethods = Sebesség beállítása -StopSoundMethods = Hanglejátszás leállítása -MockSpinnerAddItems = elemek hozzáadása... -AccelerometerSensorHelpStringComponentPallette = Láthatatlan komponens, amely képes érzékelni ha valaki rázza a telefont és a készülék gyorsulását három dimenzióban (m/s2). A három dimenziót az alábbi változók képviselik:
    \n
  • x-gyorsulás: 0 ha a készülék sima felszínen fekszik mozdulatlanul, pozitív szám ha jobb oldalra dől (vagyis a bal széle emelkedik), és negatív szám ha bal oldalra dől (vagyis a jobb széle emelkedik).
  • \n
  • y-gyorsulás: 0 ha a készülék sima felszínen fekszik mozdulatlanul, pozitív szám ha a készülék alja emelkedik, negatív ha a teteje.
  • \n
  • z-gyorsulás: -9.8 m/s2 (a Föld gravitációs erejének megfelelő nagyságú) ha a készülék párhuzamos helyzetben van a földdel és a képernyője felfelé néz, 0 ha merőleges a földre (valamelyik élén áll), és +9.8 ha lefelé néz. Az is befolyásolja ezt az értéket ha a telefont a föld irányába vagy azzal ellentétesen mozgatjuk.
-ActivityStarterHelpStringComponentPallette =

A komponens AktivitásIndítása parancsával egy Androidos aktivitást indíthatunk el (egy aktivitás nagyon sokféle tevékenységet jelenthet, lásd a példákat).

Ezt több célra is felhasználhatjuk:

    \n
  • egy másik App Inventorban létrehozott alkalmazás elindítása
  • \n
  • a kamera alkalmazás elindítása
  • \n
  • webes keresés elindítása
  • \n
  • a böngésző megnyitása egy megadott URL-el
  • \n
  • a térkép alkalmazás megnyitása egy konkrét hellyel
\nOlyan Androidos aktivitás is elindítható vele, amely szöveges adattal tér vissza.

-BallHelpStringComponentPallette =

Egy kör alakú \"szereplő\", amelyet ha egy Rajzvászon komponensre helyezünk, akkor képes reagálni a tapintásra és húzásra, valamint kapcsolatba léphet a többi szereplővel (pl: ütközés vizsgálata).

A labda mozgása az Irány, FrissítésiIntervallum és a Sebesség tulajdonságokon keresztül. Ha például azt akarjuk hogy a labda felfelé mozogjon másodpercenként 4 képpontnyival, akkor az elérhető úgy, hogy az Irány 90 [fok], a FrissítésiIntervallum 1000 [ezredmásodperc], a a Sebesség pedig 4.

A labda kinézetét csak a Sugár és a Szín tulajdonságokkal állítható be (teljesen egyedi kinézethez használd a Szereplő komponenst és állítsd be annak Kép tulajdonságát.

-BarcodeScannerHelpStringComponentPallette = A komponens grafikus vonalkódokat képes beolvasni és szöveggé alakítani. -BluetoothClientHelpStringComponentPallette = Bluetooth kliens komponens. Egy Bluetooth szerverhez lehet vele kapcsolódni. -BluetoothServerHelpStringComponentPallette = Bluetooth szerver komponens. Egy vagy több Bluetooth kliens kapcsolódhat hozzá. -ButtonHelpStringComponentPallette = Gomb vezérlő, amely képes érzékelni ha rákattintanak. A képernyő szerkesztőben vagy akár a blokk szerkesztőben is testre szabható a kinézete, de akár az is hogy képes legyen-e kattintások érzékelésére (Enabled). -CamcorderHelpStringComponentPallette = A komponens segítségével videó felvételt készíthetünk a készülék kamerájával. A felvétel elkészülte után kerül végrehajtásra az ElkészültAFelvétel esemény, amelynek paramétereként megkapjuk a videót tároló fájl teljes elérési útját. Ezt később felhasználhatjuk például arra, hogy egy videó lejátszó komponens MédiaTartalomElérésiÚtja tulajdonságát beállítsuk rá. -CameraHelpStringComponentPallette = A komponens segítségével egy fotót készíthetünk a készülék kamerájával. A felvétel elkészülte után kerül végrehajtásra az elkészült a fotó esemény, amelynek paramétereként megkapjuk a fotót tároló fájl nevét. Ezt később felhasználhatjuk például arra, hogy egy Kép komponens Kép forrása tulajdonságát beállítsuk rá. -CanvasHelpStringComponentPallette =

Egy téglalap alakú terület a képernyőn, amelyre szereplőket lehet rajzolni és reagál az érintésekre.

A szereplők helyzetét (X, Y) koordinátákkal lehet megadni, ahol:

  • X a szereplő vízszintes távolsága (képpontban) a rajzvászon bal szélétől
  • Y a szereplő függőleges távolsága (képpontban) a rajzvászon tetejétől

Érintésre/húzásra eseményekkel reagál, amelyeket a Blokk Szerkesztőben lehet kezelni.

Vonalakat, téglalapokat, köröket és más alakzatokat lehet rá rajzolni.

-CheckBoxHelpStringComponentPallette = Jelelő négyzet vezérlő, amely képes érzékelni ha rákattintanak. Kétféle állapota lehet: vagy ki van pipálva vagy nincs. A Képernyő Szerkesztőben és Blokk Szerkesztőben is testre szabható a kinézete. -ClockHelpStringComponentPallette =

Láthatatlan komponens, amellyel lekérdezhető az aktuális idő és időzítésre is használható (adott időközönként végrehajtani egy feladatot).

Ugyancsak képes dátumok szöveggé alakítására, ahol ha nem adunk meg formátumot, akkor az alapértelmezettet használja: \"MMM d, yyyy HH:mm:ss a\" (pl: Jan 8, 2008 11:35:00 AM). A lehetséges formátumokról itt olvashatsz.

-ContactPickerHelpStringComponentPallette =

Egy gomb, amelyet ha lenyomunk, megjeleníti a készüléken található névjegyek listáját. Miután a felhasználó kiválasztott közülük egyet, az alábbi információk állnak rendelkezésre a NévjegyKiLettVálasztva blokkban:

    \n
  • Névjegy név: a névjegyhez tartozó személy/cég neve
  • \n
  • E-mail cím: a névjegyhez tartozó elsődleges e-mail cím
  • \n
  • NévjegyUri: névjegy erőforrás azonosítója (URI) a készüléken
  • \n
  • Kép: a névjegyhez tartozó kép fájl elérési útja, amely értéket felhasználhatjuk egy Kép vagy egy Szereplő komponens Kép forrása mezőjének beállításánál.
\n

Vannak egyéb tulajdonságai, amelyek a gomb kinézetét módosítják (Szöveg víszintes igazítás, Háttérszín, stb.), illetve az hogy a gombra rá lehet-e kattintani (Engedélyezett).

Nem mindegyik készülék támogatja a névjegyek kiválasztását. Hiba esetén egy felugró üzenetablakban lesz látható a hiba oka, de ezt a viselkedést felülírhatjuk a Képernyő komponens HibaTörtént blokkjában.

-DatePickerHelpStringComponentPallette =

Egy gomb, amely kattintásra egy felugró ablakot jelenít meg, amelyben egy dátumot választhatunk ki.

-EmailPickerHelpStringComponentPallette =

Az EmailCímVálasztó egy szöveges beviteli mező, amelybe ha elkezdünk írni, akkor megjeleníti azoknak a tárolt e-mail címeket, amelyek a már begépelt szöveggel kezdődnek. Ha a list túl hosszú a lista, akkor több másodpercet is igénybe vehet annak betöltése. Ilyenkor egy ideiglenes eredményt jelenít meg a rendszer, amíg a teljes lista el nem készül.

A begépelt szöveg a Szöveg mezőben található, ha ez üres, akkor pedig Segítség/Tipp mező tartalma lesz látható.

\n

Vannak egyéb tulajdonságai, amelyek a gomb kinézetét módosítják (SzövegVíszintesIgazítás, Háttérszín, stb.), illetve az hogy a gombra rá lehet-e kattintani (Engedélyezett).

A szöveges beviteli mezőket sokszor használjuk a Gomb komponenssel együtt, amikor is a felhasználó a szöveg beírása után rákattint egy gombra.

-Ev3MotorsHelpStringComponentPallette = Magas és alacsony szintű hozzáférést is biztosít a LEGO MINDSTORMS EV3 robot mozgását irányító motorhoz. -Ev3TouchSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 roboton található érintés érzékelőhöz. -Ev3GyroSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 roboton található giroszkóphoz. -Ev3ColorSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 roboton található színérzékelő eszközhöz. -Ev3UltrasonicSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 roboton található ultrahang érzékelőhöz. -Ev3CommandsHelpStringComponentPallette = Alcsony szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 robothoz, közvetlen parancsokat küldhetünk vele az eszközre. -Ev3UIHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 robot grafikus képességeihez. -Ev3SoundHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 roboton található hanglejátszóhoz. -FileHelpStringComponentPallette = Láthatatlan komponens, amellyel fájlokat írhatunk és olvashatunk. Alapértelmezetten az alkalmazáshoz rendelt privát adatkönyvtárba írja az állományokat. A Companion segédalkalmazás az /sdcard/AppInventor/data könyvtárt használja fájlok írására, a hibakövetés (debugging) elősegítésére. Ha a fájl elérési útja perjellel (/) kezdődik, akkor a program azt az /sdcard mappához viszonyítva értelmezi. Például /alma.txt esetén a tényleges elérési út /sdcard/alma.txt lesz. -FormHelpStringComponentPallette = Legfelsőbb szintű komponens, amely magába foglal minden más komponenst az alkalmazásban. -FusiontablesControlHelpStringComponentPallette =

Láthatatlan komponens, amellyel Google Fusion Tables adatabázisokat használhatunk, új táblákat hozhatunk létre, módosíthatjuk a már meglévőket és lekérdezhetjük a bennük tárolt adatokat.

A komponens a Fusion Tables API 2.0 verzióját használja.

Ha használni akarjuk ezt a komponenst, akkor ehhez be kell jelentkezni a Google megfelelő szerverére. Ezt kétféleképpen lehet megtenni. Egyrészt be lehet jelentkezni az API Kulcs használatával, amit fejlesztőként igényelhetünk (lásd lejjebb). Ha ezt a megoldást választjuk akkor az alkalmazás felhasználójának is be kell jelentkeznie a Fusion Tables használata előtt. A másik lehetőség az ún. Szolgáltatási Fiókkal (Service Account) történő bejelentkezés. Ehhez először létre kell hozni egy ún. Szolgáltatási E-mail Címet (Service Account E-mail Address), amelyet a Google API Konzol felületén lehet megtenni. Ezután Fusion Table Vezérlőn (Fusion Table Control) be kell állítani a Szolgáltatási E-mail Címet, majd a mobilalkalmazás erőforrásként feltölteni a titkos kulcsot és beállítani rá a KulcsFájl tulajdonságát a komponensnek. Legvégül pedig a \"belépés szolgáltatási e-mail címmel\" mezőt ki kell pipálni. Szolgáltatási Fiók használata esetén a Fusion Tables adatabázisokhoz való összes azon keresztül történik majd, a mobilalkalmazás felhasználójának nem kell hozzá bejelentkeznie.

Az API Kulcs megszerzéséhez az alábbiakat kell tenni:

  1. Nyisd meg a Google API Konzolt és jelentkezz be amennyiben az szükséges.
  2. Válaszd ki a Szolgáltatások (Services) menüpontot a bal oldali menüből.
  3. Válaszd ki a Fusion tables szolgáltatást a listából és kapcsold be.
  4. Menj vissza a főmenübe és válaszd ki a API Hozzáférés (API Access) menüpontot.

Az API Kulcsod a panel alján, az Egyszerű API Hozzáférés (Simple API Access) szekcióban. Ezt az értéket kell megadnod a komponens APIKulcs mezőjében a Fusion Tables technológiát használó alkalmazásodban.

Az API Kulcs beállítása után, írj be a Lekérdezés mezőbe egy érvényes Fusiontables SQL lekérdező parancsot és hívd meg a LekérdezésElküldése blokkot a parancs lefuttatásához. Az App Inventor ekkor elküldi a parancsot a Fusion Tables szervernek, majd a MegérkezettALekérdezésEredménye esemény meghívásával jelzi hogy megjött az eredmény. A lekérdezés eredményét CSV formában kapjuk vissza, amely listává alakítható a \"készíts listát CSV táblázatból\" or \"készíts listát CSV sorból\" blokkokkal.

A parancs szövegének UTF-kódolásával nem kell külön foglalkozni, viszont követni kell a Fusion Tables Kézikönyvben megadott szintaxist, amely többek között azt jelenti, hogy az oszlopok neveinél meg kell különböztetnünk a kis- és nagy betűket, valamint aposztrófok közé kell tenni azokat, ha szóközt tartalmaznak.

-GameClientHelpStringComponentPallette = Lehetővé teszi hogy az alkalmazás internetes játékszerverekkel kommunikáljon. -GyroscopeSensorHelpStringComponentPallette =

Láthatatlan komponens, amely a készülék szögsebességét (fok / sec) méri három dimenzióban.

A helyes működéshez a készüléknek rendelkeznie kell giroszkóppal, valamint az Engedélyezett mezőt Igaz értékre kell állítani.

-HorizontalArrangementHelpStringComponentPallette =

Egy olyan elrendező elem, amely a belé rakott komponenseket balról jobbra jeleníti meg. Ha azt szeretnéd, hogy a komponenseket inkább egymás alá helyezze, akkor a FüggőlegesElrendezés vezérlőt érdemes használnod.

-HorizontalScrollArrangementHelpStringComponentPallette =

Egy olyan elrendező elem, amely a belé rakott komponenseket balról jobbra jeleníti meg. Ha azt szeretnéd, hogy a komponenseket inkább egymás alá helyezze, akkor a FüggőlegesElrendezés vezérlőt érdemes használnod.

Ez a komponens görgethető (ha a benne lévő elemek nem férnek mind ki).

-ImageHelpStringComponentPallette = Képek ábrázolására szolgáló komponens. A Képernyő Szerkesztőben és a Blokk Szerkesztőben is beállítható a kép forrása, szélessége, magassága és egyéb tulajdonságai is. -ImagePickerHelpStringComponentPallette = Egy olyan gomb, amely megnyitja a készülék fotógalériáját és lehetőséget ad egy kép kiválasztására. Ezután a kiválasztott képet elmenti egy fájlba, amelynek elérési útját a komponens KépElérésiÚtja tulajdonsága tartalmazza majd. Legfeljebb 10 fotót lehet ezzel elmenteni. Ha azon felül is kijelölünk egyet, akkor az felülírja a legrégebben kiválasztott képet. -ImageSpriteHelpStringComponentPallette =

Egy kétdimenziós kép, amelyet ha egy Rajzvászon komponensre helyezünk, akkor képes reagálni a tapintásra és húzásra, valamint kapcsolatba léphet a többi szereplővel (pl: ütközés vizsgálata).

A labda mozgása az Irány, FrissítésiIntervallum és a Sebesség tulajdonságokon keresztül. Ha például azt akarjuk hogy a labda felfelé mozogjon másodpercenként 4 képpontnyival, akkor az elérhető úgy, hogy az Irány 90 [fok], a FrissítésiIntervallum 1000 [ezredmásodperc], a a Sebesség pedig 4.

Ha a KépesForgásra tulajdonság Igaz értékre van beállítva, akkor a szereplőnek beállított kép az Irány tulajdonság szerint megadott irányba fordul.

Ha ütközés vizsgálatakor a szereplő el van forgatva, akkor is valójában az el nem forgatott változatot használja a rendszer a vizsgálathoz, ezért az nem biztos hogy mindig pontos lesz.

-LabelHelpStringComponentPallette = A Címke komponens egy szöveg ábrázolására szolgál. A Képernyő Szerkesztőben és a Blokk Szerkesztőben is beállítható a tartalma a Szöveg tulajdonságán keresztül, valamint az elhelyezése, a betűk mérete és egyéb jellemzői is. -ListPickerHelpStringComponentPallette =

Egy gomb, amely kattintásra egy szöveges listát jelenít meg, amelyből a felhasználó kiválaszthat egy listaelemet. A lista elemei a ListaElemekMintSzöveg tulajdonságon keresztül állíthatók be (vesszővel elválasztva, pl: első elem, második elem, harmadik elem) a Képernyő Szerkesztőben vagy a Blokk Szerkesztőben. Ugyancsak beállíthatjuk, ha a Blokk Szerkesztőben egy lista értéket rendelünk a ListaElemek mezőhöz.

A ListaSzűrésBekapcsolva tulajdonságot igaz értékre állítva lehetővé tehetjük a keresést a listaelemek között. További tulajdonságaival állítható például a gomb megjelenítése (SzövegVíszintesIgazítás, HáttérSzín, stb.) és hogy rá reagál-e kattintásra (Engedélyezett).

-ListViewHelpStringComponentPallette =

Egy szöveges listát megjelenítő komponens.
A lista elemei a ListaElemekMintSzöveg tulajdonságon keresztül állíthatók be, vagy a Blokk Szerkesztőben a ListaElemek mezőnek értéket adva.

-LocationSensorHelpStringComponentPallette =

Láthatatlan komponens, amely a készülék földrajzi helyzetéről ad információt, többek között a szélességi és hosszúsági fokról, magasságról (ha az eszköz támogatja), sebességéről, valamint címéről. Képes \"geokódolásra\" is, vagyis a szövegesen megadott címnek visszaadja a földrajzi koordinátáit: a szélességi fokát a CímSzélességiFoka blokk, a hosszúsági fokot pedig CímHosszúságiFoka blokk adja vissza.

Működéséhez az Engedélyezett tulajdonságot Igaz értékre kell állítani, valamint a készülék képes kell hogy legyen GPS-en vagy mobil hálózaton keresztül meghatározni a jelenlegi földrajzi koordinátákat.

Az alkalmazás indításakor még nem biztos hogy rendelkezésre állnak ezek az információk, lehet hogy várni kell rá egy kicsit, érdemes lehet feliratkozni a HelyzetMegváltozott eseményre.

-MediaStoreHelpStringComponentPallette =

A MédiaTárhely komponens segítségével egy webszolgáltatáson keresztül média fájlokat tárolhatunk. Egyetlen metódusa van, amellyel a szolgáltatás BLOB tárhelyére tölthetünk fel egy média objektumot, majd visszakapjuk a letárolt fájl URL-jét.

-NearFieldHelpStringComponentPallette =

Láthatatlan komponens, amely rövidtávú vezeték nélküli kommunikációra képes.

Jelenleg csak szöveges üznetek küldésére és fogadására képes (amennyiben a készülék támogatja).

Az üzenetek olvasásához az OlvasásMód mezőt Igaz értékre, írásához pedig Hamis értékre kell állítani

Figyelem: a komponens csak az alkalmazás kezdő képernyőjén képes működni.

-NotifierHelpStringComponentPallette = A felugró üzenet komponensen keresztül figyelmeztető üzeneteket, ideiglenes felugró ablakokat és az Android naplózási lehetőségeit tudjuk használni:
  • SzövegesÜzenetAblak: egy üzenetet jelenít meg, amelyet a felhasználó egy gomb megnyomásával tüntethet el
  • VálasztásAblak: egy üzenetet és két szöveges gombot jelenít meg, a felhasználó két gomb közül az egyik megnyomásával tüntetheti el az ablakot, amelynek hatására a MegtörténtAVálasztás esemény következik be
  • SzövegBevitelAblak: a felhasználó a megjelenő üzenetre egy szöveg bevitelével válaszolhat, amelynek hatására a MegtörténtASzövegBevitel esemény következik be
  • IdeiglenesFigyelmeztetőAblak: egy ideiglenes figyelmeztető üzenetet jelenít meg, amely rövid idő után magától eltűnik
  • FolyamatÁbrázolóAblak: egy üzenetet és egy forgó animációt jelenít meg, jelezve hogy egy befejezetlen folyamat megy a háttérben. Csak a FolyamatÁbrázolóAblakBezárása paranccsal lehet eltüntetni.
  • FolyamatÁbrázolóAblakBezárása: eltünteti azt az ablakot amelyet a FolyamatÁbrázolóAblak parancs hozott elő.
  • HibaÜzenetNaplózása: egy hibaüzenetet ír az Android rendszer szöveges eseménynaplójába.
  • FigyelmeztetőÜzenetNaplózása: egy figyelmeztető üzenetet ír az Android rendszer szöveges eseménynaplójába.
  • InformációÜzenetNaplózása: egy egyszerű szöveges üzenetet ír az Android rendszer szöveges eseménynaplójába.
  • Bármelyik ablakban megjelenő üzenet formázható az alábbi HTML elemekkel:<b>, <big>, <blockquote>, <br>, <cite>, <dfn>, <div>, <em>, <small>, <strong>, <sub>, <sup>, <tt>. <u>
  • Ugyancsak használható a <font> elem a szöveg színének beállítására, pl: <font color=\"blue\">. A szöveg nevét angolul kell megadni. A használható szín nevek: aqua, black, blue, fuchsia, green, grey, lime, maroon, navy, olive, purple, red, silver, teal, white, yellow, stb.
-NxtColorSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT robot színérzékelő eszközéhez. -NxtDirectCommandsHelpStringComponentPallette = Alacsony szintű hozzáférést biztosít a LEGO MINDSTORM NXT robothoz, közvetlen parancsok küldhetők vele a készülékre. -NxtDriveHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT eszközhöz, a parancsaival mozgathatjuk és forgathatjuk a robotot. -NxtLightSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT robot fényérzékelő eszközéhez. -NxtSoundSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT hangerő mérő eszközéhez. -NxtTouchSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT érintés érzékelő eszközéhez. -NxtUltrasonicSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT ultrahang érzékelő eszközéhez. -OrientationSensorHelpStringComponentPallette =

Láthatatlan komponens, amely a készülék fizikai irányáról ad információkat három dimenzióban:

  • x elfordulás: 0 fok ha a készülék a földön fekszik, 90 fok ha a bal oldalán áll, és -90 fok ha a jobb oldalán.
  • y elfordulás: 0 fok ha a készülék a földön fekszik, 90 fok ha a készülék teteje néz függőlegesen lefele, 180 fok ha a képernyő függőlegesen lefele néz. Hasonlóképp -90 fok ha a készülék alja néz lefelé, -180 fok ha a képernyő függőlegesen lefele néz.
  • z elfordulás: 0 fok ha a észak felé néz, 90 fok ha keletre, 180 fok ha dél irányába, 270 fok ha nyugatra.
Ezek az értékek akkor lehetnek pontosak, ha a készülék nem mozog.

-PasswordTextBoxHelpStringComponentPallette =

Egy szöveges beviteli mező, ahová jelszavakat lehet beírni. Hasonlóan működik mint a Szövegbeviteli mező komponens, de itt nem láthatók a felhasználó által begépelt karakterek.

A beírt szöveg lekérdezhető vagy beállítható a Szöveg tulajdonságon keresztül. Ha a beviteli mező üres, akkor a Segítő szöveg tartalma jelenik meg, amellyel segítő utalást adhatunk mit is kell oda beírni.

A szöveges beviteli mezőket sokszor használjuk a Gomb komponenssel együtt, amikor is a felhasználó a szöveg beírása után rákattint egy gombra.

-PedometerHelpStringComponentPallette = A LépésSzámláló a beépített GyorsulásMérő segítségével számon tartja hány lépést tett meg a készüléket használó személy, illetve hogy az mekkora földrajzi távolságnak felel meg. -PhoneCallHelpStringComponentPallette =

Egy láthatatlan komponens, amellyel telefon hívásokat kezdeményezhetünk a Telefonszám mezőben megadott számra (pl: "36301234567"), amelyet a Képernyő Szerkesztőben és a Blokk Szerkesztőben is beállíthatunk. A szövegként megadott telefonszám tartalmazhat kötőjel, zárójel és pont karaktereket, de szóközt nem.

A komponens TelefonHívásIndítása blokkjával indíthatjuk el ténylegesen a hívást.

Gyakran használjuk a Névjegy választó vezérlővel együtt, amely lehetővé teszi hogy a felhasználó kiválasszon egy lementett névjegyet és a hozzá tartozó telefonszámot.

-PhoneNumberPickerHelpStringComponentPallette =

Egy gomb, amelyet ha lenyomunk, megjeleníti a készüléken található elmentett telefonszámok listáját. Miután a felhasználó kiválasztott közülük egyet, az alábbi információk állnak rendelkezésre a Névjegy ki lett választva blokkban:

    \n
  • Névjegy név: a névjegyhez tartozó személy/cég neve
  • \n
  • E-mail cím: a névjegyhez tartozó elsődleges email cím
  • \n
  • Telefonszám: névjegyhez tartozó telefonszám
  • \n
  • Kép: a névjegyhez tartozó kép fájl elérési útja, amely értéket felhasználhatjuk egy Kép vagy egy Szereplő komponens Kép forrása mezőjének beállításánál.
\n

Vannak egyéb tulajdonságai, amelyek a gomb kinézetét módosítják (Szöveg víszintes igazítás, Háttérszín, stb.), illetve az hogy a gombra rá lehet-e kattintani (Engedélyezett).

Nem mindegyik készülék támogatja a telefonszám kiválasztását. Hiba esetén egy felugró üzenetablakban lesz látható a hiba oka, de ezt a viselkedést felülírhatjuk a Képernyő komponens HibaTörtént blokkjában.

-PhoneStatusHelpStringComponentPallette = A komponens a telefon állapotáról ad vissza információkat. -PlayerHelpStringComponentPallette =

Egy multimédia komponens, amely zenék és hosszabb hangfájlok lejátszására képes, valamint a telefont rezgetésére (a Blokk Szerkesztőben megadott időtartamra). A hang/zene forrása (fájlnév, URL) a Képernyő Szerkesztőben és a Blokk Szerkesztőben is megadható. A támogatott fájl formátumról itt található információ: Android Supported Media Formats.

A zene lejátszóval zenéket és hosszabb hangokat érdemes lejátszani, rövidebb hangfájlokhoz használjuk inkább a hang lejátszó komponenst.

-SharingHelpStringComponentPallette =

Egy láthatatlan komponens, amely fájlok és üzenetek megosztását teszi lehetővé a te alkalmazásod és a többi készülékre telepített alkalmazás között. Használatkor a komponens megjeleníti azon alkalmazások listáját, amelyek a megosztásra szánt adatot képesek kezelni, a felhasználó pedig kiválaszthat közülük egyet (pl. egy email alkalmazást vagy egy SMS alkalmazást).

A megosztandó fájl elérési útja lekérdezhető közvetlenül egy KépVálasztó vagy egy Kamera komponenstől, de akár egy már a lászülék tárhelyén lévő fájlt is felhasználhatunk.

Különböző készülékek különböző módon tárolhatják ugyanazt a fájlt, például ha van egy alma.gif állomány a Appinventor/assets könyvtárban, akkor ennek a teljes elérési útja lehet akár:

  • \"file:///sdcard/Appinventor/assets/alma.gif\"
  • vagy
  • \"/storage/Appinventor/assets/alma.gif\"

-SliderHelpStringComponentPallette = A Csúszka egy víszintes rúd, amelynek van egy mozgatható része. Ez képviseli a Csúszka értéktartományán belül felvett értéket, a felhasználó pedig jobbra vagy balra mozgathatja az ujjai segítségével. Ha megváltozik a helyzete/értéke, akkor bekövetkezik az CsúszkaÉrtékMegváltozott esemény. Ez felhasználható például arra hogy a változásra reagálva módosítsuk egy másik komponens tulajdonságát (pl: egy SzövegbeviteliMező betűméretét vagy egy Labda komponens átmérőjét). -SoundHelpStringComponentPallette =

Egy multimédia komponens, amely hangok lejátszására képes, valamint a telefont rezgetésére (a Blokk Szerkesztőben megadott időtartamra). A hangfájl neve a Képernyő Szerkesztőben és a Blokk Szerkesztőben is megadható. A támogatott fájl formátumról itt található információ: Android Supported Media Formats.

A Hanglejátszóval rövid hangokat érdemes lejátszásani, hoszabb zenékhez használjuk inkább a ZeneLejátszó komponenst.

-SoundRecorderHelpStringComponentPallette =

Hangfelvétel készítésére képes a készülék mikrofonjával.

-SpeechRecognizerHelpStringComponentPallette = Hangfelismerő algoritmus segítségével a rögzített beszédet írott szöveggé alakítja. -SpinnerHelpStringComponentPallette =

A FelugróLista komponens egy szöveges listát tartalmazó felugró ablak, amelyből a felhasználó kiválaszthat egy elemet. A lista elemei a ListaElemekMintSzöveg tulajdonságon keresztül állíthatók be (vesszővel elválasztva, pl: első elem, második elem, harmadik elem) a Képernyő Szerkesztőben vagy a Blokk Szerkesztőben. Ugyancsak beállíthatjuk, ha a Blokk Szerkesztőben egy lista értéket rendelünk a ListaElemek mezőhöz.

-TableArrangementHelpStringComponentPallette =

Egy olyan elrendező elem, amely táblázatos formában (sor-oszlop szerint) jeleníti meg a belé helyezett elemeket.

-TextBoxHelpStringComponentPallette =

Egy komponens, amelybe a felhasználó szöveget írhat be. A beírt szöveg lekérdezhető vagy beállítható a Szöveg tulajdonságon keresztül. Ha a beviteli mező üres, akkor a SegítőSzöveg tartalma jelenik meg, amellyel segítő utalást adhatunk mit is kell oda beírni.

A Többsoros tulajdonsággal állíthatjuk be hogy a szöveg több sorba is átnyúlhat-e. Egysoros bevitel esetén a billentyűzet automatikusan bezárul, ha a felhasználó a Done/Kész gombot lenyomja. Többsoros szövegmezőknél ezt a BillentyűzetElrejtése paranccsal lehet elérni, vagy a Vissza gomb lenyomásával a felhasználó által.

A CsakSzámok tulajdonsággal beállítható hogy a szövegmezőbe csak szám karaktereket lehessen beírni.

A többi tulajdonság a szöveg mező megjelenését szabályozza (pl: HáttérSzín), vagy azt hogy lehet-e bele írni (Engedélyezett).

A szöveges beviteli mezőket sokszor használjuk a Gomb komponenssel együtt, amikor is a felhasználó a szöveg beírása után rákattint egy gombra.

Ha azt akarod hogy a beírt szöveg ne legyen látható, akkor használd inkább a JelszóBevitel komponenst.

-TextToSpeechHelpStringComponentPallette = Az írott szöveget hangos beszéddé alakítja és lejátsza. -TextingHelpStringComponentPallette =

Egy láthatatlan komponens, amely üzenet küldés paranccsal el tudja küldeni az Üzenet mezőben megadott szöveget a TelefonSzám mezőben megadott számra.

Ha az üzenet fogadási mód mező értéke 1-re (Kikapcsolva) van beállítva, akkor az alkalmazás egyáltalán nem fog üzeneteket fogadni. Ha a üzenet fogadási mód mező értéke 2-re (csak ha előtérben az alkalmazás) van beállítva, akkor az alkalmazás csak akkor fogad SMS üzeneteket ha az előtérben fut. És végül ha az üzenet fogadási mód mező értéke 3-ra (mindig) van beállítva, akkor az alkalmazás az előtérben futva és kikapcsolva is képes üzeneteket fogadni. Az az alkalmazás amely használja ezt a komponenst, akkor is fogad üzeneteket amikor a háttérben van (vagyis nincs az adott pillanatban a készülék képernyőjén), sőt, még akkor is ha nem is fut, csak telepítve van a készüléken. Ha üzenet érkezik a telefonra amikor az alkalmazás nincs az előtérben, akkor az értesítési sávban megjelenik egy értesítés, amelyre tapintva elindul majd az alkalmazás. Fejlesztőként valószínű hogy azt akarod hogy a felhasználó is képes legyen szabályozni az üzenet fogadási mód mező értékét, hogy ne legyen kötelező az alkalmazásnak fogadnia minden üzenetet.

Amikor üzenet érkezik, az üzenet érkezett esemény kerül meghívásra, amelyben megkapjuk a küldő fél telefonszámát és az üzenet tartalmát.

Ha a Google asszisztens engedélyezve tulajdonság be van kapcsolva, akkor a Google Asszisztens segítségével akár wifin keresztül is küldhetünk üzenetet. Ez viszont csak akkor működik ha rendelkezünk Google Asszisztens fiókkal és a készülékünkön Android 2.0 (Eclair) vagy frissebb operációs rendszer fut.

A címzett számát (pl., 361-555-1212) a telefonszám mezőn keresztül állíthatjuk be (pl., 3615551212). Tartalmazhat pont, kötőjel és zárójel karaktereket (de figyelmen kívül lesznek hagyva), viszont szóközt nem.

A címzett beállításánál felhasználhatjuk a telefonszám választó komponenst, megengedve a felhasználónak hogy a telefonon rögzített kapcsolatok listájából válasszon telefonszámot.

-TimePickerHelpStringComponentPallette =

Egy gomb, amely kattintásra egy ablakot jelenít meg, amelyben a felhasználó kiválaszthat egy tetszőleges időpontot.

-TinyDBHelpStringComponentPallette =

A TinyDB egy helyi adatbázis az alkalmazás számára.

Az App Inventorban készített alkalmazások nem mentik el automatikusan a használt változók értékeit. Az alkalmazás bezárásával az összesnek törlődik az értéke. Ezzel szemben a TinyDB perzisztens adattárolást tesz lehetővé, az ide mentett adatok az alkalmazás bezárása után is megmaradnak és elérhetők lesznek a program újboli indítása során. Egy jó példa erre egy játék során elért pontszámok (high score) elmentése.

Az adatbázisba szöveges elemeket írhatunk, mindegyikhez egy címkét rendelve. Később pedig lekérdezhetjük hogy az adatbázisban az adott címkéhez milyen adat tartozik.

Egy alkalmazáshoz csak egyetlen TinyDB adatbázis tartozhat, még ha több TinyDB komponenst is használunk a programban, az ugyanarra az adattárra fog hivatkozni. Ha azt a hatást akarjuk elérni hogy több adatbázisunk akkor használjunk különböző címkéket. Mindegyik alkalmazás saját TinyDB adatbázissal rendelkezik, ezért a TinyDB nem használható alkalmazások közötti adatmegosztásra, arra viszont igen hogy egy több képernyős program képernyői között adatot osszon meg.

Fejlesztés közben az AI Companion alatt futó összes alkalmazás ugyanazt a TinyDB adatbázist használja, de ez csak addig tart amíg különálló alkalmazás nem lesz a fejlesztés alatt álló programból (külön .apk fájlba csomagolva). Addig is érdemes figyelni mikor és mit törlünk a TinyDB adatbázisból.

-TinyWebDBHelpStringComponentPallette = Láthatatlan komponens, amellyel egy webes adatbázisban tárolhatunk adatokat és olvashatjuk azokat vissza. -TwitterHelpStringComponentPallette =

Egy láthatatlan komponens, amelynek segítségével a Twitteren küldhetünk üzeneteket. Amint a felhasználó bejelentkezett a Twitter fiókjába (és meghívódott az ennek sikerességét jelző SikeresenBejelentkezett esemény), több parancs is elérhetővé válik:

  • keresés a tweetek között szöveg vagy címke alapján (TwitterKeresés)

\n
  • Tweet küldése (Tweet)
  • \n
  • Tweet küldése képpel együtt (TweetKéppel)
  • \n
  • Közvetlen üzenet egy felhasználónak (KözvetlenÜzenet)
  • \n
  • A legutóbbi üzenetek olvasása, amit közvetlenül a te Twitter fiókodnak címeztek (KözvetlenÜzenetekLekérdezése)
  • \n
  • Egy felhasználó követése (Követés)
  • \n
  • Egy felhasználó követésének leállítása (KövetésLeállítása)
  • \n
  • Követőid listájának lekérdezése (KövetőkLekérdezése)
  • \n
  • Az általad követett felhasználók legújabb üzeneteinek lekérdezése (BarátokÜzeneteinekLekérdezése)
  • \n
  • A legutóbbi üzenetek lekérdezése amelyekben megemlítették a felhasználódat (EmlítésekLekérdezése)
  • \n

    A komponens használatához szükséged lesz egy Felhasználói Kulcsra (Consumer Key) és egy Titkos Kulcsra (Consumer Secret). Ezeket a kulcsokat az alábbi címen lehet létrehozni és az alkalmazáshoz rendelni: http://twitter.com/oauth_clients/new

    -VerticalArrangementHelpStringComponentPallette =

    Egy olyan elrendező elem, amely a belé rakott komponenseket függőlegesen, egymás alá rendezve jeleníti meg. Ha azt szeretnéd, hogy a komponenseket inkább víszintesen egymás mellé helyezze, akkor a VíszintesElrendezés vezérlőt érdemes használnod.

    -VerticalScrollArrangementHelpStringComponentPallette =

    Egy olyan elrendező elem, amely a belé rakott komponenseket függőlegesen, egymás alá rendezve jeleníti meg. Ha azt szeretnéd, hogy a komponenseket inkább víszintesen egymás mellé helyezze, akkor a VíszintesElrendezés vezérlőt érdemes használnod.

    Ez a komponens görgethető (ha a benne lévő elemek nem férnek mind ki).

    -VideoPlayerHelpStringComponentPallette =

    Egy videók lejátászára képes komponens. Amíg az alkalmazás fut, addig egy téglalap alakú területet foglal el a képernyőről. Ha a felhasználó hozzáér ehhez a lejátszó területéhez, akkor megjelennek a lejátszás/szünet, előretekerés és visszatekerés gombjai a képernyőn. Ugyanezek a funkciók elérhetők a BlokkSzerkesztőben is a Start, Pause, és SeekTo parancsokkal.

    Az alábbi formátumú videók lejátszására képes: Windows Media Video (.wmv), 3GPP (.3gpp) és MPEG-4 (.mp4). A támogatott formátumokról itt található további információ: Android Supported Media Formats

    Az App Inventorban készült alkalmazások maximális mérete 5 MB, ezért ennél nagyobb videó fájlokat sem lehet fordításkor hozzáadni a projekthez. Ha mégis nagy méretű videót szeretnél lejátszani, akkor állítsd a videó forrását egy URL-re.

    -VotingHelpStringComponentPallette =

    A Szavazó komponens segítségével több felhasználó dönthet többségi szavazással egy vagy több kérdésről egy webszolgáltatáson keresztül.

    -WebHelpStringComponentPallette = Egy láthatatlan komponens, amellyel HTTP GET, POST, PUT és DELETE parancsokat adhatunk ki. -WebViewerHelpStringComponentPallette = Weboldalak böngészésére szolgáló komponens. A kezdő weboldal címe a Képernyő Szerkesztőben és Blokk Szerkesztőben is beállítható a KezdőOldalURL tulajdonságon keresztül. Figyelem: komponens nem rendelkezik a hagyományos asztali böngészők összes képességével. -YandexTranslateHelpStringComponentPallette =

    Tetszőleges szöveget fordíthatunk vele egyik nyelvről a másikra. A fordító a Yandex webes szolgáltatását használja, ezért működő internetes kapcsolat szükséges hozzá.

    A nyelvet amelyről fordítunk és a nyelvet amelyre fordítunk kétbetűs kódokkal kell megadni (pl: \"en-hu\" az angolról magyarra fordítás kódja). Ha a fordítandó nyelvet üresen hagyjuk (pl: \"es\" kód esetén spanyolra fordítunk) akkor a fordító megpróbálja a szöveg alapján kitalálni azt.

    A Yandex fordítóról további információkat - többek között az elérhető nyelvek listáját - a http://api.yandex.com/translate/ címen találhatsz.

    Megjegyzés: a fordítás aszinkron módon, a háttérben történik. Amint elkészült, meghívódik a ElkészültAFordítás esemény.

    -FirebaseDBHelpStringComponentPallette = Láthatatlan komponens, amellyel adatokat tárolhatunk egy webes Firebase adatbázisban. Ezen keresztül akár több alkalmazás is meg tud osztani adatokat egymással. Alapértelmezetten az adatok az App Inventor közös Firebase adatbázisában lesznek eltárolva, de a \"FirebaseURL\" mezőn keresztül akár a saját adatbázisodra is beállíthatod. További információt a Firebase.com oldalon találhatsz. -createNoProjectsDialogText = Üdvözöllek az App Inventor 2 oldalán! -createNoProjectsDialogMessage1 = Még nincs egyetlen App Inventor projekted sem. Az App Inventor használatának bemutatásához kattints az \"Útmutató\" gombra az oldal felső részén. Ha pedig új projektet szeretnél létrehozni, akkor kattints a \"Új projekt létrehozása\" gombra az oldal bal felső sarkában. -createNoprojectsDialogMessage2 = Kellemes mobilprogramozást! -createWelcomeDialogText = Üdvözöllek az App Inventorban! -createWelcomeDialogButton = Tovább -doNotShow = Többet ezt ne mutasd meg -showSurveySplashMessage =

    Kérlek töltsd ki ezt a rövid kérdőívet, hogy megismerjük a véleményedet és jobbá tehessük az App Inventort.

    -showSurveySplashButtonNow = Most kitöltöm -showSurveySplashButtonLater = Később töltöm ki -showSurveySplashButtonNever = Soha nem akarom kitölteni -invalidSessionDialogText = A jelenlegi munkamenet ideje lejárt -invalidSessionDialogMessage =

    Figyelem: Ez a munkamenet lejárt.

    Ezt az App Inventor fiókot egy másik helyről is megnyitották. Ugyanannak a fióknak az egyszerre több helyről való használata kárt tehet a projektben.

    Válassz az alábbiak közül:

    • Ennek a munkamenetnek a befejezése.
    • A másik munkamenet befejezése.
    • Folytatás két párhuzamos munkamenettel.

    -invalidSessionDialogButtonEnd = Munkamenet bezárása -invalidSessionDialogButtonCurrent = Legyen ez az aktuális munkamenet -invalidSessionDialogButtonContinue = Folytatás mind a két munkamenettel -bashWarningDialogText = Folytatás két párhuzamos munkamenettel? -bashWarningDialogMessage =

    FIGYELEM: Egy második App Inventor munkamenet is létrejött ehhez a fiókhoz. Használhatod mind a két munkamenetet párhuzamosan, de könnyen lehet hogy emiatt több változás is elveszik majd a projektedben.

    Nem ajánlott egyszerre több munkamenetet használni. De ha mégis így szeretnél dolgozni, akkor mindenképpen érdemes gyakran mentéseket készítened a saját gépedre, hogy legyen az App Inventor szerverétől független másolatod. Ehhez használd a \"Kijelölt projekt (.aia) exportálása a számítógépemre\" menüpontot a Projekt menüből.

    -bashWarningDialogButtonContinue = Folytatás több párhuzamos munkamenettel -bashWarningDialogButtonNo = Ne használj egyszerre töb munkamenetet -finalDialogText = A munkameneted lezárult -accountDisabledMessage = A fiókod zárolva van -finalDialogMessage =

    A munkameneted befejeződött, most már bezárhatod ezt az ablakot

    -corruptionDialogText = Projekt Olvasási Hiba -corruptionDialogMessage =

    Hiba történt a projekt fájl beolvasása közben

    Lezártuk a munkamenetet, hogy ne keletkezzen több kár a projektben. Bezárhatod ezt az ablakot.

    -blocksTruncatedDialogText = Nincs egyetlen blokk sem a képernyőhöz rendelve -blocksTruncatedDialogMessage =

    Úgy tűnik minden blokkot töröltél a %1 képernyőről.

    • Elmentheted az üres képernyőt, és akkor az eltávolított blokkok véglegesen törölve lesznek a projektből.
    • Vagy visszaállíthatod a projekt legutoljára elmentett változatát.

    -blocksTruncatedDialogButtonSave = Üres képernyő mentése. -blocksTruncatedDialogButtonNoSave = Előző verzió visszaállítása -blocksTruncatedDialogButtonHTML = Kérlek várj %1 másodpercet... -InsertRowMethods = Sor beszúrása -GetRowsMethods = Sorok lekérdezése -GetRowsWithConditionsMethods = Sorok lekérdezése feltétellel -SwitchToSimplifiedChinese = 简体中文 -SwitchToTraditionalChinese = 繁体中文 -SwitchToSpanish = Español -SwitchToFrench = Français -SwitchToItalian = Italiano -SwitchToRussian = Pусский -SwitchToKorean = 한국어 -SwitchToSwedish = Svenska -switchToPortugueseBR = Português do Brasil -switchToPortuguese = Português -switchToDutch = Nederlands -ProgressBarFor = Folyamat Sáv -proximitySensorComponentPallette = Közelség érzékelő -ProximitySensorHelpStringComponentPallette = Láthatatlan komponens, amely a tárgyak távolságát méri a készülék képernyőjétől. A legtöbb készülék az abszolút távolságot adja vissza centiméterben, de van amelyik csak azt állapítja meg hogy a tárgy a megadott maximális távolságon (Maximális távolság mező) belül vagy kívül van. Gyakran használják arra hogy megállapítsa a felhasználó a füléhez nyomva tartja-e a telefont. -MaximumRangeProperties = Maximális távolság -KeepRunningWhenOnPauseProperties = Háttérben is működik -ProximityChangedPropertiesProperties = Távolság változott mező -ProximityChangedMethods = Távolság változott -MaximumRangeMethods = Maximális távolság parancs -ItemTextColorProperties = Listaelem szöveg színe -ItemBackgroundColorProperties = Listaelem háttérszíne -FusionTablesStandardErrorMessage = Fusion Tables lekérdezési hiba -FusionTablesDeprecated = FIGYELEM: a Google elavulttá tette a Fusion Tables Szolgáltatást. 2019. december 3-án le fog állni További információ (angolul) -SelectionColorProperties = Kiválasztott elem címe -LaunchPickerMethods = Választó ablak megjelenítése -SetDateToDisplayMethods = Dátum beállítása -SetDateToDisplayFromInstantMethods = Dátum beállítása pillanat érték alapján -IncomingCallAnsweredEvents = Bejövő hívásra válasz -PhoneCallEndedEvents = Telefonhívás véget ért -PhoneCallStartedEvents = Telefonhívás elkezdődött -OnSettingsEvents = Beállítások menü -OtherPlayerStartedEvents = Másik lejátszás is elindult -ProximityChangedEvents = Távolság megváltozott -ThumbEnabledProperties = Engedélyezett -SetTimeToDisplayMethods = Időpont beállítása -SetTimeToDisplayFromInstantMethods = Időpont beállítása pillanat érték alapján -XMLTextDecodeMethods = XML szöveg dekódolása -extraKeyValueWarning = Az Extra kulcs és Extra érték mezők elavultnak számítanak és a jövőben nem lesznek támogatva. Használd helyettük az Extra értékek mezőt a blokk szerkesztőben.\n -MediaStoredEvents = Média fájl el lett mentve -PostMediaMethods = Média tárolása -scaleProportionally = Képarányos méretezés -scaleToFit = Mérethez igazítás -UnauthenticateMethods = Kijelentkezés -useDefault = Alapértelmezett adatbázis szerver használata -DefaultURLProperties = Alapértelmezett URL -warningDialogTitle = Figyelem! -useFrontDeprecated = Az Elülső kamera használata mező el lett távolítva a Kamera komponensből -firebaseExperimentalWarning = A FirebaseAdatbázis kísérleti jelleggel került be az App Inventorba, így előfordulhatnak a jövőben olyan változtatások is, amelyek nem biztosítják a visszafele kompatibilitást. Nincs garancia rá hogy azok a különálló (saját .apk csomaggal rendelkező) alkalmazások, amelyek ezzel a komponenssel beépítve készültek, a jövőben is működni fognak. -readOnlyMode = Csak olvasható módban vagy -sessionDead = Vagy lejárt a munkameneted, vagy miközben dolgoztál az App Inventort frissítették. Újra kell indítanod a munkamenetedet hogy folytathasd a munkádat. Kattints az \"Újratöltés\" gombra. -reloadWindow = Újratöltés -AccountNameProperties = Felhasználó fiók neve -ProjectIDProperties = Projekt azonosító -CloudDBErrorEvents = Felhő adatbázis hiba történt -cloudDBComponentPallette = Felhő adatbázis -CloudDBHelpStringComponentPallette = Láthatatlan komponens, amellyel adatokat tárolhatunk egy internetes adatbázis szerveren (amelyen a Redis adatbázis szoftver fut). Ezzel adatokat oszthatunk meg akár több alkalmazás között is. Alapértelmezés szerint az adatok az MIT szerverén lesznek eltárolva, de akár te is létrehozhatsz egy ilyen adatbázis szervert. Ha saját adatbázist használsz, akkor állítsd be a \"RedisSzerver\" és \"RedisPort\" mezőket a megfelelő értékekre. -RedisServerProperties = Redis szerver -DefaultRedisServerProperties = Alapértelmezett Redis szerver -RedisPortProperties = Redis port -TokenProperties = Token -GetValuesMethods = Értékek lekérdezése -itemToAddParams = hozzáadandó érték -UseSSLProperties = SSL használata -CloudConnectedMethods = Csatlakozott az adatbázishoz -PrimaryColorProperties = Elsődleges szín -PrimaryColorDarkProperties = Elsődleges sötét szín -AccentColorProperties = Másodlagos szín -ThemeProperties = Téma -classicTheme = Klasszikus -defaultTheme = Alapértelmezett téma -blackTitleTheme = Sötét szöveg -darkTheme = Sötét -MapHelpStringComponentPallette =

    Egy kétdimenziós panel, amely egy térkép lapjait jeleníti meg és Jelölő elemeket helyezhetünk rá az egyes helyek azonosítására. A térkép lapjait és adatait az OpenStreetMap biztosítja.

    A Képernyő Szerkesztőben három gomb látható egymás alatt a képernyőre helyezett térképen, amelyek segítségével annak a földrajzi határait állíthatjuk be.

    • Az elsőn egy lakat látható: ha zárva van, és a térképet egérrel elhúzzuk, akkor a komponens helyzetét változtatjuk meg a többi képernyőn lévő vezérlőhöz képest. Ha nyitva van, akkor egérrel húzva a térkép földrajzi határait változtatjuk meg.
    • A második gombbal a térkép aktuális helyzetét (szélességi és hosszúsági fokait) menti el alapértelmezett pozíciónak (az alkalmazás betöltésekor ez a hely jelenik majd meg).
    • A harmadik gombbal az alapértelmezett helyzetet állíthatjuk vissza, ha elgörgettünk onnan (például azért hogy Jelölő elemeket helyezzünk el máshova).

    -CenterFromStringProperties = Térkép középpontja -BoundingBoxProperties = Befoglaló téglalap -MapTypeProperties = Térkép típusa -ScaleUnitsProperties = Méretegységek -ShowCompassProperties = Iránytűt mutat -ShowScaleProperties = Méretet mutat -ShowUserProperties = Felhasználó pozícióját mutatja -ShowZoomProperties = Nagyítást mutat -EnableRotationProperties = Forgatható -ZoomLevelProperties = Nagyítási szint -BoundsChangeEvents = Térkép koordinátái megváltoztak -ReadyEvents = Térkép betöltődött -ZoomChangeEvents = Nagyítás megváltozott -InvalidPointEvents = Hibás koordináta lett megadva -PanToMethods = Ugrás koordinátára -mapTypeRoads = Térkép -mapTypeAerial = Műhold -mapTypeTerrain = Domborzat -mapScaleUnitsMetric = Metrikus -mapScaleUnitsImperial = Angolszász -ImageAssetProperties = Kép -DescriptionProperties = Leírás -DraggableProperties = Mozgatható -StartDragEvents = Mozgatás elkezdődött -DragEvents = Mozgatják -StopDragEvents = Mozgatás befejeződött -unknownMapTypeException = Ismeretlen térkép típus: {0} -mapCenterWrongNumberArgumentsException = A térképK középpontja szövegként mezőhöz két számot vártam, ehelyett {0} értéket kaptam -mapZoomLevelOutOfBoundsException = A nagyítási szint csak 1 és 18 közötti szám lehet -mapZoomIn = Nagyítás -mapZoomOut = Kicsinyítés -mapLockMovementTooltip = Térkép mozgatás zárolása -mapUnlockMovementTooltip = Térkép mozgatás engedélyezése -mapSetInitialMapTooltip = Kezdeti pozíció beállítása erre a helyre -mapResetBoundingBoxTooltip = Befoglaló téglalap visszaállítása -CreateMarkerMethods = Jelölő elem létrehozása -SetLocationMethods = Koordináták beállítása -FillColorProperties = Kitöltési szín -StrokeColorProperties = Körvonal szín -StrokeWidthProperties = Vonalvastagság -TypeProperties = Típus -LoadErrorEvents = Térkép betöltési hiba -GotFeaturesEvents = Térkép objektumok betöltődtek -TapAtPointEvents = Megérintették a térkép egy pontját -FeatureFromDescriptionMethods = Térkép objektum létrehozása szöveges leírásból -EnableInfoboxProperties = Van felugró információs ablak -EnableZoomProperties = Nagyítható -HideInfoboxMethods = Információs ablak elrejtése -ShowInfoboxMethods = Információs ablak megjelenítése -fromUrlButton = Betöltés URL-ről... -urlImportWizardCaption = Erőforrás betöltése URL-ről... -AnchorHorizontalProperties = Horgonypont vízszintes elrendezése -AnchorVerticalProperties = Horgonypont függőleges elrendezése -FeaturesProperties = Térkép objektumok -FeaturesFromGeoJSONProperties = Térkép objektumok GeoJSON formátumban -PointsProperties = Alakzat pontjai -EnablePanProperties = Görgethető -DistanceToFeatureMethods = Másik térkép objektumtól való távolság -DistanceToPointMethods = Ponttól való távolság -BearingToFeatureMethods = Iránya egy másik objektumhoz viszonyítva -BearingToPointMethods = Iránya egy ponthoz viszonyítva -HolePointsProperties = Lyukpontok -CentroidMethods = Középpont kiszámítása -PointsFromStringProperties = Síkidom pontjai -HolePointsFromStringProperties = Lyukpontok -DoubleTapAtPointEvents = Duplán tapintottak egy pontot -FeatureClickEvents = Térképobjektumra kattintottak -FeatureDragEvents = Elhúztak egy térkép objektumot -FeatureLongClickEvents = Hosszan kattintottak egy térkép objektumra -FeatureStartDragEvents = Elkezdték mozgatni az egyik térkép objektumot -FeatureStopDragEvents = Befejezték a térkép objektum mozgatását -LongPressAtPointEvents = Hosszan érintettek egy pontot -circleComponentPallette = Kör -CircleHelpStringComponentPallette =

    Egy kört lehet vele rajzolni a térkép megadott pontjára. A kör sugarát méterben kell megadni.

    A kör közepén lévő négyzet húzásával tudjuk annak helyzetét megváltoztatni a térképen, a szélén lévő négyzettel pedig a kör sugarát állíthatjuk be.

    -mapFeatureParams = térkép objektum -centroidsParams = középpontok használata távolság számításnál -centroidParams = középpontok használata távolság számításnál -featureCollectionComponentPallette = Térkép objektum gyűjtemény -FeatureCollectionHelpStringComponentPallette =

    Egy vagy több térkép objektumot (kört, poligont, stb.) tartalmazó gyűjtemény. Tartalmát GeoJSON formátumban kell megadni, ami lehet helyi erőforrás, vagy betölthető egy URL-en keresztül is.

    -lineStringComponentPallette = Vonal -LineStringHelpStringComponentPallette =

    Vonalak láncolata a térképen.

    A vonalak végére kattintva húzhatjuk azt szét vagy össze, így állítva be a helyét és hosszát. A vonal közepére kattintva oszthatjuk azt ketté (ezután a két részt külön vonalként kezelhetjük).

    -mapComponentPallette = Térkép -featureParams = térkép objektum -featuresParams = térkép objektumok -descriptionParams = szöveges leírás -zoomParams = nagyítás -markerComponentPallette = Jelölő -MarkerHelpStringComponentPallette =

    Egy ikon, amelyet egy térképen található hely azonosítására használhatunk. Beállíthatjuk a hozzá tartozó képet, a színét és a helyszín leírását is.

    -polygonComponentPallette = Poligon -PolygonHelpStringComponentPallette =

    Egy sokszöget rajzolhatunk vele a térkép felületére.

    A sokszög csúcsaira kattintva húzhatjuk azokat szét vagy össze, így állítva be a helyüket és hosszukat. Az oldalak közepére kattintva oszthatjuk azokat ketté (ezután a két részt külön vonalként kezelhetjük).

    -errorMessageParams = hibaüzenet -rectangleComponentPallette = Téglalap -RectangleHelpStringComponentPallette =

    Egy téglalapot rajzol a térképre északi, déli, keleti és nyugati oldalakkal.

    A téglalap méretét és helyét a sarkainak szét- vagy összehúzásával változtathatjuk meg.

    -EastLongitudeProperties = Keleti oldal hosszúsági foka -NorthLatitudeProperties = Északi oldal szélességi foka -SouthLatitudeProperties = Déli oldal szélességi foka -WestLongitudeProperties = Nyugati oldal hosszúsági foka -LoadFromURLMethods = Térkép elemek betöltése URL címről -customEllipsis = Egyéni... -ActionBarProperties = Akciósáv -valueNotInRange = A megadott {0} érték nem a megengedett [{1}, {2}] tartományban van. -expectedLatLongPair = Hibás szélességi-hosszúsági fokokat adtál meg {0} értékének. -LocationSensorProperties = Helyzetérzékelő -UserLatitudeProperties = Felhasználó szélességi foka -UserLongitudeProperties = Felhasználó hosszúsági foka -BoundsMethods = Befoglaló téglalap kiszámítása -CenterMethods = Középpont kiszámítása -SetCenterMethods = Középpont beállítása -RotationProperties = Forgatás -GetVersionNameMethods = -SdkLevelMethods = SDK verzió -GetInstallerMethods = Telepítő -NoticeTitle = Figyelem! -PackageNotice = Használd ezt az opciót ha olyan alkalmazást szeretnél készíteni amely Andoird 2.1-en (Eclair) is működik. Ebben az esetben nem tudod majd az alkalmazást a Play Store-ba publikálni. +defaultText = Alapértelmezett +cancelButton = Mégse +okButton = OK +dismissButton = Elvetés +oldNameLabel = Jelenlegi név: +newNameLabel = Új név: +noneCaption = Nincs +deleteButton = Törlés +deleteProjectButton = Projekt törlése +publishToGalleryButton = Megosztás a Galériában +updateGalleryAppButton = Alkalmazás új verziójának feltöltése a Galériába +showWarnings = Figyelmeztetések mutatása +hideWarnings = Figyelmeztetések elrejtése +addButton = Fájl feltöltése... +projectNameHeader = Név +projectDateCreatedHeader = Készítés dátuma +projectDateModifiedHeader = Módosítás dátuma +projectPublishedHeader = Megosztva a Galériában +saveButton = Mentés +saveAsButton = Mentés másként +checkpointButton = Mentett verzió ... +toggleTutorialButton = Segédlet váltása +addFormButton = Képernyő hozzáadása ... +removeFormButton = Képernyő törlése +connectButton = Kapcsolat +reallyDeleteForm = A képernyő eltávolításával az összes hozzá tartozó komponens és blokk is törlődik.\nA törlés később nem vonható vissza.\nBiztosan el akarod távolítani a {0} képernyőt a projektből? +openBlocksEditorButton = Blokk szerkesztő megnyitása +screensButton = Képernyők ... +switchToBlocksEditorButton = Parancsok +switchToFormEditorButton = Képernyő +isBuildingButton = Folyamatban az alkalmazás csomagolása ... +cancelBlocksEditorButton = Folyamatban a Képernyő Szerkesztő megnyitása ... (kattints ide ha mégsem akarod megnyitni) +blocksEditorIsOpenButton = A Blokk Szerkesztő nyitva van +switchLanguageButton = Nyelv +deleteComponentButton = Komponens törlése +publishButton = Megosztás +switchLanguageEnglishButton = Angol +switchLanguageChineseCNButton = Kínai +switchLanguageGermanButton = Német +switchLanguageVietnameseButton = Vietnámi +moderationDotDotDot = ... +moderationReportTextHeader = Jelentés +moderationAppHeader = App +moderationReportDateCreatedHeader = Jelentve ekkor +moderationAppAuthorHeader = App készítője +moderationReporterHeader = Jelentő +inappropriateAppContentRemoveTitle = Helytelen app tartalom: törlés +inappropriateAppContentTitle = Helytelen app tartalom +inappropriateUserProfileContentTitle = Helytelen felhasználói profil leírás +labelChooseTemplate = Válassz egy sablont +emailSentFrom = Küldő: +emailSentTo = Címzett: +buttonSendEmail = E-mail küldése +labelDeactivateApp = App inaktiválása +labelReactivateApp = App újraaktiválása +labelDeactivateAppAndSendEmail = Alkalmazás inaktiválás és e-mail küldése +labelmarkAsResolved = Jelölés megoldottként +labelmarkAsUnresolved = Jelölés megoldatlanként +labelSeeAllActions = Előző műveletek +titleSeeAllActionsPopup = Előző jelentéshez kapcsolódó műveletek +galleryMoreReports = További Jelentések +symbolX = X +labelCancel = Mégse +labelConfirm = Megerősítés +inappropriateAppContentRemoveEmail = A(z) \"{0}\" alkalmazásodat eltávolítottuk a Galériából, mert nem odaillő tartalmat találtunk benne. Kérlek nézd át az erre vonatkozó szabályokat a http://ai2.appinventor.mit.edu/about/termsofservice.html címen. Ha úgy érzed igazságtalanul jártunk el veled szemben küldj róla egy e-mailt nekünk.\n +inappropriateAppContentEmail = A(z) \"{0}\" alkalmazásodban nem odaillő tartalmat találtunk. Kérlek nézd át az erre vonatkozó szabályokat és módosítsd az alkalmazásodat annak megfelelően. +inappropriateUserProfileContentEmail = A profilod leírása nem odaillő szöveget tartalmaz. Kérlek javítsd! +seeMoreLink = több mutatása ... +hideLink = elrejtés +moderationActionSendAnEmail = e-mail küldése: +moderationActionDeactivateThisAppWithEmail = inaktiválja az alkalmazást és elküld egy emailt: +moderationActionReactivateThisApp = újraaktiválja ezt az alkalmazást +moderationActionMarkThisReportAsResolved = a jelentés megjelölése megoldottként +moderationActionMarkThisReportAsUnresolved = a jelentés megjelölése megoldatlanként +moderationShowResolvedReports = Mutasd a megoldott jelentéseket +moderationSendEmailTitle = E-mail küldése +moderationAppReactivatedTitle = App Inventor Galéria: Alkalmazás aktiválva +moderationAppReactivateBody = A(z) \"{0}\" alkalmazásod újra lett aktiválva. +moderationAppDeactivatedTitle = App Inventor Galéria: Alkalmazás deaktiválva +moderationErrorFailToSendEmail = Nem sikerült elküldeni az e-mailt, kérlek próbálkozz újra később. +getMotdFailed = Nem sikerült letölteni a szerverről a Mai Nap Üzenetét. +titleYoungAndroid = MIT App Inventor +internalErrorReportBug = Belső hiba történt. Szeretnéd jelenteni a hibát? +internalError = Belső hiba történt. +internalErrorSeeDebuggingView = Belső hiba történt. A hibakereső nézetben visszakereshető. +internalErrorClickOkDebuggingView = Belső hiba történt. További tudnivalókért kattints az \"ok\" gombra. +serverUnavailable = A kiszolgáló pillanatnyilag nem elérhető. Kérlek próbáld újra később. +noprojectDialogTitle = Nincs projekt kijelölve +noprojectDuringConnect = Kapcsolódás előtt létre kell hozni vagy kijelölni egy projektet! +galleryIdNotExist = Nincs alkalmazás a Galériában ilyen azonosítóval. +defaultRpcMessage = Töltés ... +savingRpcMessage = Mentés ... +copyingRpcMessage = Másolás ... +deletingRpcMessage = Törlés ... +packagingRpcMessage = Csomagolás ... +downloadingRpcMessage = Letöltés a telefonra... +gitBuildId = Fordítás dátuma: {0} Verzió: {1} +privacyLink = Adatvédelmi irányelvek +termsLink = Feltételek +privacyTermsLink = Adatvédelmi irányelvek és felhasználási feltételek +projectsTabName = Projektek +projectMenuItem = Projektjeim +newProjectMenuItem = Új projekt létrehozása +importProjectMenuItem = Projekt importálása (.aia) saját gépről ... +trashProjectMenuItem = Projekt törlése +saveMenuItem = Projekt mentése +saveAsMenuItem = Projekt mentése másként... +checkpointMenuItem = Pillanatnyi állapot mentése +importTemplateButton = Projekt (.aia) betöltése a tárolóból... +exportProjectMenuItem = Kijelölt projekt (.aia) exportálása a számítógépemre +exportAllProjectsMenuItem = Összes projekt exportálása +downloadKeystoreMenuItem = Kulcstár exportálása +uploadKeystoreMenuItem = Kulcstár importálása +deleteKeystoreMenuItem = Kulcstár törlése +componentsTabName = Komponensek +myComponentsMenuItem = Saját komponensek +startNewComponentMenuItem = Új komponens létrehozása +importComponentMenuItem = Komponens importálása a projektbe... +importExtensionMenuItem = Kiegészítő komponens importálása +buildComponentMenuItem = Komponens csomagolása +uploadComponentMenuItem = Komponens (.aix) feltöltése saját gépről... +componentUploadWizardCaption = Komponens feltöltése... +componentImportWizardCaption = Kiegészítő komponens importálása a projektbe +componentRenameWizardCaption = Kiegészítő komponens átnevezése +componentNameLabel = Kiegészítő neve +componentImportError = A kiegészítő komponenst nem sikerült importálni! +componentImportUnknownURLError = Ismeretlen URL! Nem sikerült importálni a komponenst! +componentUpgradedAlert = Kiegészítő komponens frissítésre került: +notComponentArchiveError = A kiválasztott fájl nem tartalmaz komponenst!\nA komponens fájlok kiterjesztése aix. +noComponentSelectedError = Válaszd ki az importálandó komponenst +noComponentFound = Nem találom a \"{0}\" komponenst a \"{1}\" projekt betöltése során. +noUrlError = Adj meg egy URL-t +componentNameHeader = Név +componentVersionHeader = Verzió +confirmDeleteComponents = Biztosan törölni akarod az alábbi komponens(eke)t: {0}? +componentImportFromComputer = Saját gépről +componentImportFromURL = URL +componentDatabaseCorrupt = Hibás a \"{0}\" projekthez tartozó komponens adatbázis. +extensionDescriptorCorrupt = Hibás a \"{0}\" projekthez tartozó \"{1}\" komponens leírása. +invalidExtensionInProject = A \"{0}\" projekt hibás kiegészítő komponenst tartalmaz. Az App Inventor megpróbálja azt figyelmen kívül hagyni és folytatni a betöltést. +connectTabName = Adatkapcsolat +AICompanionMenuItem = AI Companion +emulatorMenuItem = Emulátor +feedbackLink = Hiba Jelentése +tabNameGallery = Galéria +tabNameModeration = Moderáció +privateProfileLink = Profil +tabNameProjects = Projektjeim +usbMenuItem = USB +resetConnectionsMenuItem = Kapcsolat bontása +hardResetConnectionsMenuItem = Emulátor alaphelyzetbe állítása +buildTabName = Apk fájl létrehozása +showBarcodeMenuItem = App (QR kód létrehozása .apk-hoz) +showBarcodeMenuItem2 = Google Play App (QR kód létrehozása .apk-hoz) +downloadToComputerMenuItem = App (.apk mentése a számítógépre) +downloadToComputerMenuItem2 = Google Play App (.apk mentése a számítógépre) +generateYailMenuItem = YAIL Forráskód Generálása +helpTabName = Súgó +aboutMenuItem = Névjegy +companionInformation = Companion segédalkalmazás adatai +companionUpdate = Companion segédalkalmazás frissítése +companionUpdateMustHaveProject = Létre kell hoznod egy projektet a Companion segédalkalmazás frissítéséhez +showSplashMenuItem = Indító képernyő megjelenítése +libraryMenuItem = Könyvtár +getStartedMenuItem = Kezdjünk hozzá +extensionsMenuItem = Kiegészítő komponensek +tutorialsMenuItem = Segédletek +troubleshootingMenuItem = Hibaelhárítás +forumsMenuItem = Fórumok +feedbackMenuItem = Hiba jelentése +adminTabName = Adminisztrátor +downloadUserSourceMenuItem = Felhasználói forráskód letöltése +switchToDebugMenuItem = Váltás a hibakereső panelre +myProjectsTabName = Projektjeim +guideTabName = Útmutató +feedbackTabName = Hiba jelentése +galleryTabName = Galéria +signOutLink = Kijelentkezés +tabNameDesign = Design +tabNameDebugging = (Hibakeresés) +chooseProject = Kérlek, válassz egy projektet megnyitásra, vagy hozz létre egy új projektet! +emailInboxTitle = E-mailek +emailSendTitle = E-mail küldése +componentListBoxCaption = Saját komponensek +assetListBoxCaption = Média +messagesOutputBoxCaption = Üzenetek +motdBoxCaption = Üdvözöllek az App Inventorban! +odeLogBoxCaption = Fejlesztői Üzenetek +paletteBoxCaption = Paletta +projectListBoxCaption = Projektjeim +studioListBoxCaption = Studióim +profilePageBoxCaption = Profilom +moderationPageBoxCaption = Riportok +galleryListBoxCaption = Galéria +galleryAppBoxCaption = Alkalmazás a Galériában +userProfileBoxCaption = Felhasználói profil +propertiesBoxCaption = Tulajdonságok +sourceStructureBoxCaption = Komponensek +blockSelectorBoxCaption = Parancsok +builtinBlocksLabel = Beépített +builtinControlLabel = Vezérlés +builtinLogicLabel = Logika +builtinTextLabel = Szöveg +builtinListsLabel = Listák +builtinColorsLabel = Színek +builtinVariablesLabel = Változók +builtinProceduresLabel = Eljárások +anyComponentLabel = Bármilyen komponens +textAnyComponentLabel = Bármely +viewerBoxCaption = Megjelenítő +savedProject = Az App Inventor elmentette a projekt módosításait ({0}) +saveErrorMultipleFiles = Szerverhiba: nem sikerült elmenteni egy vagy több fájlt. Kérlek próbáld újra később! +yailGenerationError = Hiba történt a(z) {0} képernyőn a YAIL generálása során: {1}. A hiba javítása után próbáld újra a YAIL kód generálást. +nonVisibleComponentsHeader = Rejtett komponensek +showHiddenComponentsCheckbox = Rejtett komponensek megjelenítése +previewTabletSize = Tablet mérete +previewPhoneSize = Telefonméret +renameTitle = komponens átnevezése +malformedComponentNameError = A komponens neve csak betűt, számot és alul vonást tartalmazhat, és betűvel kell kezdődnie +duplicateComponentNameError = Már van ilyen nevű komponens! +sameAsComponentTypeNameError = A komponens neve nem lehet azonos egy komponenstípus nevével +sameAsComponentInstanceNameError = A komponens típusának neve nem egyezhet meg egy már létező komponens példány nevével! +reservedNameError = A név nem lehet egyik sem a következők közül: CsvUtil, Double, Float, Integer, JavaCollection, JavaIterator, KawaEnvironment, Long, Short, SimpleForm, String, Pattern, YailList, YailNumberToString, YailRuntimeError, abstract, continue, for, new, switch, assert, default, goto, package, synchronized, boolean, do, if, private, this, break, double, implements, protected, throw, byte, else, import, public, throws, case, enum, instanceof, return, transient, catch, extends, int, short, try, char, final, interface, static, void, class, finally, long, strictfp, volatile, const, float, native, super, while +reallyDeleteComponent = A komponens eltávolításával törlődni fog az összes hozzá tartozó blokk is. Biztosan el akarod távolítani? +reallyRemoveComponent = A komponens típus eltávolításával törlődni fog az összes példánya és a hozzájuk tartozó blokkok is. Biztosan el akarod távolítani? +textPropertyValue = {0} felirat +badValueForHorizontalAlignment = Rendszerhiba: hibás érték - {0} - a vízszintes elrendezésre. +badValueForVerticalAlignment = Rendszerhiba: hibás érték - {0} - a függőleges elrendezésre. +widthPropertyCaption = Szélesség +heightPropertyCaption = Magasság +hintPropertyValue = Tipp a {0} értékhez +externalComponentVersion = Kiegészítő Komponens Verziója: +dateBuilt = Szerkesztés dátuma: +moreInformation = További információ +loadError = Szerverhiba: fájl betöltése sikertelen. Próbáld újra később! +saveError = Szerverhiba: fájl mentése sikertelen. Próbáld újra később! +blocksEditorTabName = {0} blokk +blocksNotSaved = Nem sikerült betölteni a blokkokat. A {0} képernyőn található blokkok nem lesznek elmentve. +blocksLoadFailure = A {0} képernyőhöz tartozó blokkokat nem sikerült betölteni. Amíg a probléma fennáll, nem fogsz tudni szerkeszteni a blokk szerkesztőben. +weakAccelerometerSensitivity = alacsony +moderateAccelerometerSensitivity = közepes +strongAccelerometerSensitivity = magas +LegacyModeProperties = Kompatibilitási mód +fixedSizing = Fix méretezés +responsiveSizing = Reszponzív méretezés +leftTextAlignment = balra zárt +centerTextAlignment = középre zárt +rightTextAlignment = jobbra zárt +horizontalAlignmentChoiceLeft = balra +horizontalAlignmentChoiceRight = jobbra +horizontalAlignmentChoiceCenter = középre +verticalAlignmentChoiceTop = fel +verticalAlignmentChoiceCenter = középre +verticalAlignmentChoiceBottom = le +defaultButtonShape = alapértelmezett +roundedButtonShape = lekerekített +rectButtonShape = négyszögletű +ovalButtonShape = ovális +noAssetSelected = Válassz ki egy erőforrást! +noComponentSelected = Válassz ki egy komponenst! +noneColor = Nincs +blackColor = Fekete +blueColor = Kék +cyanColor = Ciánkék +defaultColor = Alapértelmezett +darkGrayColor = Sötétszürke +grayColor = Szürke +greenColor = Zöld +lightGrayColor = Világos szürke +magentaColor = Bíborvörös +orangeColor = Narancssárga +pinkColor = Rózsaszín +redColor = Piros +whiteColor = Fehér +yellowColor = Sárga +defaultFontTypeface = alapértelmezett +sansSerifFontTypeface = sans serif (talp nélküli) +serifFontTypeface = serif (talpas) +monospaceFontTypeface = azonos szélességű +automaticCaption = Automatikus +fillParentCaption = Szülő komponens kitöltése +percentCaption = százalék +pixelsCaption = képpont +pixelsSummary = {0} képpont +percentSummary = {0} százalék +nonnumericInputError = Az érték csak pozitív egész szám lehet +nonvalidPercentValue = A százalékos érték csak 0 és 100 között lehet +defaultScreenAnimation = Alapbeállítás +fadeScreenAnimation = Áttűnés +zoomScreenAnimation = Nagyítás +slideHorizontalScreenAnimation = Vízszintes csúsztatás +slideVerticalScreenAnimation = Függőleges csúsztatás +noneScreenAnimation = Nincs +unspecifiedScreenOrientation = Nem meghatározott +portraitScreenOrientation = Portré +landscapeScreenOrientation = Tájkép +sensorScreenOrientation = Érzékelő +userScreenOrientation = Felhasználó +shortToastLength = Rövid +longToastLength = Hosszú +renameButton = Átnevezés +addScreenButton = Hozzáadás +cancelScreenButton = Ne add hozzá +newFormTitle = Új képernyő +formNameLabel = Képernyő neve: +formCountErrorLabel = Figyelmeztetés: a képernyők száma meghaladhatja az App Inventor képességeit. Kattints Biztosan szeretnél új képernyőt hozzáadni?

    +malformedFormNameError = A képernyő neve csak betűt, számot és alulvonást tartalmazhat, és betűvel kell kezdődnie +duplicateFormNameError = Már van ilyen nevű képernyő! +addFormError = Szerverhiba: képernyő hozzáadása sikertelen. Próbáld újra később! +buildRequestedMessage = Kérés a(z) {0} alkalmazás fordítására {1} időpontban. +buildError = Szerverhiba: nem sikerült lefordítani az alkalmazást. Próbáld újra később! +buildFailedError = Nem sikerült lefordítani az alkalmazást! +buildServerBusyError = Az alkalmazás fordító szerver elfoglalt. Kérlek próbáld újra pár perc múlva. +buildServerDifferentVersion = Az alkalmazás fordító szerver nem kompatibilis az App Inventornak ezzel a verziójával. +errorGeneratingYail = Nem sikerült a(z) {0} alkalmazáshoz a kód generálása. +deleteFileCommand = Törlés... +downloadFileCommand = Letöltés a számítógépemre +checkpointTitle = Pillanatnyi állapot - {0} +saveAsTitle = Mentés Másként - {0} +defaultCheckpointProjectName = {0}_állapot{1} +previousCheckpointsLabel = Korábbi állapotok: +defaultSaveAsProjectName = {0}_másolat +checkpointNameLabel = Projekt állapot elnevezése: +copyProjectError = Szerverhiba: projekt másolása sikertelen. Próbáld újra később! +reallyDeleteFile = Biztosan törölni szeretnéd a fájlt? Ez az App Inventor szerverről való végleges törlést jelent. Az alkalmazásod egyes részei továbbra is hivatkozhatnak a törölt fájlra, ezeket meg kell majd változtatnod. +deleteFileError = Szerverhiba: fájl törlése sikertelen. Próbáld újra később! +phoneNotConnected = A készülék nincs csatlakoztatva. +barcodeTitle = A {0} hivatkozás vonalkódja +barcodeWarning = Figyelem: a vonalkód csak 2 óráig érvényes. Ld. {0} a gyakran ismételt kérdést {1} arról, hogy hogyan lehet megosztani az alkalmazásodat másokkal. +projectLoadError = Szerverhiba: nem sikerült betölteni a projektet. Próbáld újra később! +projectInformationRetrievalError = Szerverhiba: nem sikerült elérni a projekt adatait. Próbáld újra később! +downloadAllAlert = A projektek letöltése eltarthat egy ideig. Kérlek, várj türelmesen... +moreActionsButton = További akciók +downloadUserSourceDialogTitle = Felhasználói forráskód letöltése +userIdLabel = Felhasználó azonosító vagy e-mail (kis-nagybetű érzékeny): +projectIdLabel = Projekt azonosító vagy név: +invalidUserIdOrProjectIdError = Kérlek add meg az e-mail címedet/felhasználói azonosítódat és a projekt nevét/azonosítóját hogy letölthesd azt. +noProjectSelectedForDelete = Válassz egy projektet, hogy töröljük +confirmDeleteSingleProject = Biztosan törölni akarod ezt a projektet: {0} +confirmDeleteSinglePublishedProject = Biztosan törölni akarod ezt a projektet: {0}? Ha az alkalmazást a Galériába is feltöltötted, akkor onnan is törlődni fog. +confirmDeleteManyProjects = Biztosan törölni akarod ezeket a projekteket: {0} +confirmDeleteManyProjectsWithGalleryOn = Biztosan törölni akarod ezeket a projekteket: {0}? Ha bármelyiket közülük feltöltötted a Galériába, akkor onnan is törlődni fognak. +deleteProjectError = Szerverhiba: nem sikerült törölni a projektet. Próbáld újra később! +wrongNumberProjectsSelected = Egyetlen projektet válassz ki. +wrongNumberProjectSelectedForPublishOrUpdate = Csak egy projektet válassz ki publikálásra vagy frissítésre. +downloadKeystoreError = Szerverhiba: nem sikerült letölteni a kulcstár fájlt. +noKeystoreToDownload = Nincs kulcstár amit le lehetne tölteni. +uploadKeystoreError = Szerverhiba: nem sikerült feltölteni a kulcsfájlt. +confirmOverwriteKeystore = Biztosan felül akarod írni a kulcsfájlodat?\n\nHa igen, akkor a korábbi kulcsfájlod el lesz távolítva az App Inventor szerverről.\n\nHa vannak alkalmazásaid a Google Play Áruházban amelyek a felülírandó kulcstárat használják, akkor nem leszel képes frissíteni azokat a programokat.\n\nEzt követően minden projekt, amelyből alkalmazás csomagot készítesz az új kulcstár fájl felhasználásával lesz aláírva. A kulcstár fájl megváltoztatása miatt lehet hogy bizonyos régebbi alkalmazásokat nem tudsz majd újratelepíteni a készülékedre. Ha nem vagy biztos benne le akarod-e cserélni, olvasd el a kulcstárakról szóló dokumentációt a \"Súgó\" (Help) menü \"Hibakeresés\" (Troubleshooting) menüpontjában, a \"Kulcstárak és Alkalmazások aláírása\" (Keystores and Signing of Applications).\n\nA kulcstár fájl lecserélése nem visszavonható művelet. +deleteKeystoreError = Szerverhiba: nem sikerült törölni a kulcstár fájlt. +confirmDeleteKeystore = Biztosan le akarod törölni a kulcsfájlodat?\n\nHa igen, akkor a kulclfájlod el lesz távolítva az App Inventor szerverről és automatikusan egy új készül helyette.\n\nHa vannak alkalmazásaid a Google Play Áruházban amelyek a régi kulcstárat használják, akkor nem leszel képes frissíteni azokat a programokat.\n\nEzt követően minden projekt, amelyből alkalmazás csomagot készítesz az új kulcstár fájl felhasználásával lesz aláírva. A kulcstár fájl megváltoztatása miatt lehet hogy bizonyos régebbi alkalmazásokat nem tudsz majd újratelepíteni a készülékedre. Ha nem vagy biztos benne le akarod-e törölni, olvasd el a kulcstárakról szóló dokumentációt a \"Súgó\" (Help) menü \"Hibakeresés\" (Troubleshooting) menüpontjában, a \"Kulcstárak és Alkalmazások aláírása\" (Keystores and Signing of Applications).\n\nA kulcstár fájl törlése nem visszavonható művelet. +clearButton = Törlés +settingsLoadError = Szerverhiba: a beállítások betöltése sikertelen. Próbáld újra később! +settingsSaveError = Szerverhiba: a beállítások mentése sikertelen. Próbáld újra később! +done = Kész +hdrClose = Bezár +hdrMinimize = Zsugorítás +hdrSettings = Beállítás +cmMinimize = Zsugorít +cmRestore = Kibővít +cmResize = Átméretez +hdrRestore = Kibővít +notAFloat = {0} az nem szám +notAnInteger = {0} az nem egy egész szám +malformedInputError = Hibásan bevitt adat! +fileUploadWizardCaption = Fájl feltöltése... +malformedFilenameTitle = Hiba: nem megfelelő fájlnév +malformedFilename = A fájl neve csak az alábbiakat tartalmazhatja: ékezet nélküli betűk, számok, valamint a \"-\", \"_\", \".\", \"!\", \"~\", \"*\", \"(\", és \")\" karakterek +filenameBadSizeTitle = Hiba: nem megfelelő fájlméret +filenameBadSize = A fájlnevek legalább 1, legfeljebb 100 karakterből állhatnak. +fileUploadingMessage = {0} feltöltése az App Inventor szerverre +fileUploadError = Szerverhiba: nem sikerült feltölteni a fájlt. Kérlek próbáld újra később! +fileTooLargeError = Hiba: nem sikerült a fájl feltöltés, mert az túl nagy +noFileSelectedTitle = Hiba: nem választottál ki egyetlen fájlt sem +noFileSelected = Válaszd ki a feltöltendő fájlt. +aiaMediaAssetTitle = Hiba: nem sikerült .aia média erőforrásként feltölteni a fájlt +aiaMediaAsset = A fájl használatához kattints az alábbi menüpontra: Projektek > Projekt importálása (.aia) saját gépről... +aiaMediaAssetHelp = http://appinventor.mit.edu/explore/ai2/share.html +confirmOverwrite = Probléma akadt {1} mentése során\n\nMár van a projektben egy {0} nevű fájl.\nTörölni akarod a régi fájlt?\nEzzel minden olyan fájlt eltávolítasz, amely ütközik a(z) {1} fájllal. +keystoreUploadWizardCaption = KulcsTár feltöltése... +keystoreUploadError = Szerverhiba: nem sikerült feltölteni a kulcstárat. Próbáld újra később! +notKeystoreError = A megadott fájl nem kucstár formátumú! +createProjectError = Szerverhiba: projekt létrehozása sikertelen. Próbáld újra később! +templateUploadWizardCaption = Projekt létrehozása sablon alapján +templateUploadNewUrlCaption = Új sablon URL megadása +inputNewUrlCaption = Adj meg egy URL-t... +newUrlLabel = Sablonok Url: +projectUploadWizardCaption = Projekt import... +gallerySearch = Keresés +galleryEmptyText = +galleryFeaturedText = Kiemelt +galleryUnfeaturedText = Nem kiemelt +galleryTutorialText = Segédlet +galleryUntutorialText = Nem segédlet +gallerySingleSpaceText = +galleryByAuthorText = Szerző neve alapján +galleryOpenText = Alkalmazás megnyitása +galleryPublishText = Közzététel +galleryUpdateText = Frissítés +galleryRemoveText = Visszavonás +galleryRemoveConfirmText = Biztosan el akarod távolítani az alkalmazást a Galériából? +galleryEditText = Szerkesztés +galleryCancelText = Mégse +galleryNoScreenShotMessage = Kérlek tölts fel egy képet az alkalmazásod képernyőjéről mielőtt nyilvánossá tennéd +galleryNotEnoughDescriptionMessage = Kérlek adj meg egy részletesebb leírást az alkalmazásodról mielőtt nyilvánossá tennéd +galleryByDeveloperPrefixedText = Szerző +galleryCreatedDateLabel = Létrehozás Dátuma: +galleryChangedDateLabel = Változtatás Dátuma: +galleryMoreInfoLabel = Tananyag/Videó +galleryCreditLabel = Köszönet: +galleryMoreInfoHint = Ha az alkalmazáshoz tartozik tananyag vagy videó, add meg az URL-jét! +galleryCcLicenseRef = A Galériába való feltöltéssel az alkalmazást a
    Creative Commons Attribution Licensznek megfelelően teszed közzé. +galleryCreditHint = Másvalaki appját remixeled? Ha igen, említsd meg itt őket. +galleryDescriptionHint = Az alkalmazás leírása. +galleryAppOpening = Megnyitás... +galleryAppPublishing = Megosztás... +galleryAppUpdating = Frissítés... +galleryAppRemoving = Eltávolítás... +galleryAppsLike = Tetszik +galleryAppsAlreadyLike = Mégsem tetszik +galleryAppsByAuthorSidebar = Az alkalmazás készítője: +galleryAppCreatedPrefix = Készítés dátuma: +galleryAppChangedPrefix = Szerkesztés dátuma: +galleryRemixedFrom = Remix alapja: +galleryRemixChildren = Kattints ide a remixekért! +galleryAppsRemixesSidebar = Remixek a felhasználótól: +galleryReportPrompt = Kérlek indokold miért találod sértőnek ezt az alkalmazást, vagy hogy milyen módon nem tartja be az App Inventor Galéria Szabályait. +gallerySharePrompt = Másolás és link megosztása +galleryCopyButton = Másolás +galleryGalleryIdAction = /?galleryId= +galleryVisitGalleryAppLinkLabel = \n\nNézd meg a közzétett alkalmazásod: {0}/?galleryId={1} +galleryReportButton = Jelentés elküldése +galleryReportCompletionPrompt = Köszönjük a jelentést, egy adminisztrátor hamarosan feldolgozza azt. +galleryAlreadyReportedPrompt = Erről az alkalmazásról már küldtél jelentést. Egy adminisztrátor hamarosan feldolgozza azt. +galleryCommentError = Szerverhiba: nem sikerült letölteni a megjegyzéseket +galleryAppLikeError = Szerverhiba: nem sikerült letölteni a lájkok számát +galleryDeveloperAppError = Szerverhiba: nem sikerült letölteni a fejlesztői alkalmazások listáját a Galériából +galleryFeaturedAppError = Szerverhiba: nem sikerült letölteni a kiemelt alkalmazások listáját a Galériából +galleryTutorialAppError = Szerverhiba: nem sikerült letölteni az oktató alkalmazások listáját a Galériából +gallerySearchError = Szerverhiba: sikertelen keresés a Galériában +galleryRecentAppsError = Szerverhiba: nem sikerült letölteni a legújabb alkalmazások listáját a Galériából +galleryDownloadedAppsError = Szerverhiba: nem sikerült letölteni a legtöbbet letöltött alkalmazások listáját a Galériából +galleryLikedAppsError = Szerverhiba: nem sikerült letölteni a legnépszerűbb alkalmazások listáját +galleryDeleteError = Szerverhiba: sikertelen törlés a galériából +gallerySetProjectIdError = Szerverhiba: hiba történt az alkalmazás galéria azonosítójának beállításakor +projectUploadError = Szerverhiba: projekt feltöltése sikertelen. Próbáld újra később! +galleryNoExtensionsPlease = Nem tölthetsz fel olyan alkalmazást a Galériába amely kiegészítő komponenseket használ +notProjectArchiveError = A kiválasztott fájl nem egy projekt forrásfájl!\nA projekt forrásfájlok aia kiterjesztésűek. +loadingAppIndicatorText = Alkalmazás betöltése... +buttonEditProfile = Profil szerkesztése +buttonUpdateProfile = Módosítások mentése +labelEditYourProfile = Profil szerkesztése +labelYourDisplayName = A megjelenített neved +labelMoreInfoLink = További információk rólad (link) +labelEmailDescription = Az App Invetor rendszeresen üzenetet küld róla ha az alkalmazásodat kedvelik vagy letöltik. Itt meg tudod adni milyen gyakran szeretnél erről értesítést kapni. +labelEmailFrequencyPrefix = Kérek e-mailt minden +labelEmailFrequencySuffix = új lájk vagy letöltés esetén. +errorEmailFrequency = Ide egy pozitív egész számot kell beírnod +gallerySearchForAppsButton = Keresés az alkalmazások között +galleryMoreApps = További alkalmazások +gallerySearchResultsPrefix = a \" +gallerySearchResultsInfix = \" címre való keresés +gallerySearchResultsSuffix = darab eredménnyel tért vissza +galleryError = Szerverhiba: a Galéria nem elérhető +noResultsFound = Nincs találat +gallerySettingsError = Szerverhiba: a Galéria beállításai nem elérhetők +backButton = Vissza +nextButton = Következő +newYoungAndroidProjectWizardCaption = Új App Inventor projekt létrehozása +remixedYoungAndroidProjectWizardCaption = Az App Inventor projekt neve +projectNameLabel = Projekt neve: +malformedProjectNameError = A projekt neve betűvel kell hogy kezdődjön és csak betűket, számokat és aláhúzás karaktereket tartalmazhat +duplicateProjectNameError = Már létezik {0} nevű projekt. Nem hozhatsz létre projektet ugyanazzal a névvel. +whitespaceProjectNameError = A projekt neve nem tartalmazhat szóközt +firstCharProjectNameError = A projekt neve betűvel kell hogy kezdődjön +invalidCharProjectNameError = Hibás karakter. A projekt neve csak betűket, számokat és aláhúzás karaktereket tartalmazhat +projectWasUpgraded = A projekt az App Inventor egy régebbi verziójával készült és most frissítésre került\n{0} +unexpectedProblem = Hiba történt a projekt betöltésekor. {0} +newerVersionProject = A projektet az App Inventor egy újabb verziójával hozták létre. Megkíséreljük megnyitni, de előfordulhatnak kompatibilitási problémák. +veryOldProject = A projektet az App Inventor még ki nem adott verziójával hozták létre. Megkíséreljük megnyitni, de előfordulhatnak kompatibilitási problémák. +upgradeDetailLoggerReplacedWithNotifier = A {0} nevű Jegyzetelő (Logger) komponens típusa FelugróÜzenetre változott.\n +newerVersionComponentException = Nem sikerült betölteni a(z) {0} projektet (a projekt App Inventor verziója {1}, a legfrissebb ismert verzió viszont {2}). +noUpgradeStrategyException = Nem létezik frissítési stratégia a(z) {0} projekt számára ({1} verzióról {2} verzióra). +badAlignmentPropertyEditorForArrangement = Rendszerhiba: hibás érték a vízszintes vagy függőleges elrendezésre. +textReceivingChoiceOff = kikapcsolva +textReceivingChoiceForeground = csak ha előtérben az alkalmazás +textReceivingChoiceAlways = mindig +startingConnectionDialog = 0 elindul +loadingAsset = {0} erőforrás letöltése az App Inventor szerverről... +sendingAssetToCompanion = {0} küldése az AI Companion segédalkalmazásnak... +unableToCompile = Az App Inventor nem tudta lefordítani a projektet.
    A fordító hibaüzenete:
    {0}. +apkSavedToComputer = Az APK fájl a számítógép letöltési könyvtárába lesz másolva. +apkInstalledToPhone = Az APK fájl telepítésre kerül a készülékre. +waitingForBarcode = Várakozás a vonalkód megjelenésére. +preparingApplicationIcon = Alkalmazás ikon előkészítése +determiningPermissions = Szükséges engedélyek meghatározása +generatingApplicationInformation = Alkalmazás információ előállítása +compilingPart1 = Fordítás első része +compilingPart2 = Fordítás második része (kérlek várj) +preparingFinalPackage = Végső alkalmazás csomag előkészítése +buildingApk = APK felépítése +HTMLFormatProperties = HTML megjelenítés +userInterfaceComponentPallette = Felhasználói felület +layoutComponentPallette = Elrendezés +mediaComponentPallette = Média +drawingAndAnimationComponentPallette = Rajz és animáció +mapsComponentPallette = Térkép +sensorsComponentPallette = Érzékelők +socialComponentPallette = Közösségi (média) +storageComponentPallette = Adattárolás +forInternalUseOnlyComponentPallette = Csak belső használatra +formComponentPallette = Űrlap +builtinMathLabel = Matematika +connectivityComponentPallette = Hálózat +legoMindstormsComponentPallette = LEGO\u00AE MINDSTORMS\u00AE +extensionComponentPallette = Kiegészítők +externalComponentPalette = Külső komponensek +experimentalComponentPallette = Kísérleti jellegű +internalUseComponentPallette = Csak belső használatra +uninitializedComponentPallette = Nem inicializált +buttonComponentPallette = Gomb +canvasComponentPallette = Rajzvászon +checkBoxComponentPallette = Jelölőnégyzet +clockComponentPallette = Óra +datePickerComponentPallette = Dátumválasztó +imageComponentPallette = Kép +labelComponentPallette = Címke +listPickerComponentPallette = Teljes képernyős lista +listViewComponentPallette = Lista +passwordTextBoxComponentPallette = Jelszó bevitel +pedometerComponentPallette = Lépésszámláló +sliderComponentPallette = Csúszka +spinnerComponentPallette = Felugrólista +textBoxComponentPallette = Szövegbeviteli mező +timePickerComponentPallette = Időpontválasztó +tinyDBComponentPallette = TinyDB +camcorderComponentPallette = Videófelvevő +cameraComponentPallette = Kamera +imagePickerComponentPallette = Képválasztó +playerComponentPallette = Zenelejátszó +soundComponentPallette = Hanglejátszó +videoPlayerComponentPallette = Videólejátszó +yandexTranslateComponentPallette = Yandex fordító +ballComponentPallette = Labda +imageSpriteComponentPallette = Szereplő +contactPickerComponentPallette = Névjegyválasztó +emailPickerComponentPallette = E-mail cím választó +phoneCallComponentPallette = Telefonhívás +phoneNumberPickerComponentPallette = Telefonszám választó +phoneStatusComponentPallette = Telefon adatai +sharingComponentPallette = Megosztás +textingComponentPallette = SMS +twitterComponentPallette = Twitter +accelerometerSensorComponentPallette = Gyorsulásmérő +barcodeScannerComponentPallette = Vonalkód beolvasó +gyroscopeSensorComponentPallette = Giroszkóp +locationSensorComponentPallette = Helyzetérzékelő +mediaStoreComponentPallette = Médiatárhely +nearFieldComponentPallette = NFC +orientationSensorComponentPallette = Irányérzékelő +horizontalArrangementComponentPallette = Vízszintes elrendezés +horizontalScrollArrangementComponentPallette = Vízszintes görgethető elrendezés +tableArrangementComponentPallette = Táblázatos elrendezés +verticalArrangementComponentPallette = Függőleges elrendezés +verticalScrollArrangementComponentPallette = Függőleges görgethető elrendezés +nxtColorSensorComponentPallette = Nxt színérzékelő +nxtDirectCommandsComponentPallette = Nxt közvetlen parancs +nxtDriveComponentPallette = Nxt irányító +nxtLightSensorComponentPallette = Nxt fényérzékelő +nxtSoundSensorComponentPallette = Nxt hangérzékelő +nxtTouchSensorComponentPallette = Nxt érintésszenzor +nxtUltrasonicSensorComponentPallette = Nxt ultrahang érzékelő +ev3CommandsComponentPallette = Ev3 parancs +ev3UIComponentPallette = Ev3 grafika +ev3SoundComponentPallette = Ev3 hang +ev3MotorsComponentPallette = Ev3 motor +ev3TouchSensorComponentPallette = Ev3 érintésérzékelő +ev3ColorSensorComponentPallette = Ev3 színérzékelő +ev3GyroSensorComponentPallette = Ev3 giroszkóp +ev3UltrasonicSensorComponentPallette = Ev3 ultrahang érzékelő +activityStarterComponentPallette = Aktivitás indító +bluetoothClientComponentPallette = Bluetoth kliens +bluetoothServerComponentPallette = Bluetooth szerver +notifierComponentPallette = Felugró üzenet +speechRecognizerComponentPallette = Beszédfelismerő +textToSpeechComponentPallette = Szövegfelolvasó +tinyWebDBComponentPallette = TinyWebDB +webComponentPallette = Internet +fileComponentPallette = Fájl +firebaseDBComponentPallette = Firebase adatbázis +fusiontablesControlComponentPallette = Fusion tábla vezérlés +gameClientComponentPallette = Játék kliens +passwordParams = jelszó +soundRecorderComponentPallette = Hangrögzítő +votingComponentPallette = Szavazás +webViewerComponentPallette = Webböngésző +AboutScreenProperties = Névjegy ablak +ShowStatusBarProperties = Állapot sor látható +TitleVisibleProperties = Cím látható +AboveRangeEventEnabledProperties = Érzékelési tartomány feletti érték esemény bekapcsolva +ActionProperties = Akció +ActivityClassProperties = Aktivitás osztály +ActivityPackageProperties = Aktivitás csomagja +AlignHorizontalProperties = Vízszintes igazítás +AlignVerticalProperties = Függőleges igazítás +AllowCookiesProperties = Sütik engedélyezése +ApiKeyProperties = API kulcs +AppNameProperties = Alkalmazás neve +AvailableCountriesProperties = Elérhető országok +AvailableLanguagesProperties = Elérhető nyelvek +BackgroundColorProperties = Háttérszín +BackgroundImageProperties = Háttérkép +BelowRangeEventEnabledProperties = Érzékelési tartomány alatti érték esemény bekapcsolva +BluetoothClientProperties = Bluetooth kliens +BottomOfRangeProperties = Érzékelési tartomány alsó határa +CalibrateStrideLengthProperties = Lépéshossz kalibrálás +CharacterEncodingProperties = Karakterkódolás +CheckedProperties = Bekapcsolt +CloseScreenAnimationProperties = Képernyő animáció bezárása +ColorChangedEventEnabledProperties = Színváltozás esemény engedélyezve +ColumnsProperties = Oszlopok száma +ConsumerKeyProperties = Felhasználói kulcs +ConsumerSecretProperties = Titkos kulcs +CountryProperties = Ország +DataTypeProperties = Adattípus +DataUriProperties = Adat URI +DelimiterByteProperties = Elválasztó bájt +DetectColorProperties = Színek érzékelése +DistanceIntervalProperties = Frissítéshez szükséges minimális távolság +DriveMotorsProperties = Motor portok +EnabledProperties = Engedélyezett +ExtraKeyProperties = Extra kulcs +ExtraValueProperties = Extra érték +ExtrasProperties = Extra értékek +FollowLinksProperties = Hivatkozások engedélyezése +FontBoldProperties = Félkövér betűtípus +FontItalicProperties = Dőlt betűtípus +FontSizeProperties = Betűméret +FontTypefaceProperties = Betűtípus +GameIdProperties = Játékazonosító +GenerateColorProperties = Generált szín +GenerateLightProperties = Generált fény +GoogleVoiceEnabledProperties = Google Asszisztens engedélyezve +HasMarginsProperties = Van margója +HeadingProperties = Irány +HighByteFirstProperties = Magasabb helyi értékű bájtok álljanak elöl +HintProperties = Segítség/Tipp +HomeUrlProperties = Kezdőoldal URL +IconProperties = Ikon +InstantProperties = Pillanat +IgnoreSslErrorsProperties = SSL hibák mellőzése +ImageProperties = Kép forrása +IntervalProperties = Intervallum +IsLoopingProperties = Ismétlés +KeyFileProperties = Kulcsfájl +LanguageProperties = Nyelv +LineWidthProperties = Vonalvastagság +LoadingDialogMessageProperties = Párbeszéd üzenet betöltése +MessageProperties = Üzenet +MinimumIntervalProperties = Minimális frissítési intervallum (ms) +MultiLineProperties = Többsoros +NamespaceProperties = Névtér +NumbersOnlyProperties = Csak számok +OpenScreenAnimationProperties = Nyitó képernyő animáció +PaintColorProperties = Rajzolási szín +PhoneNumberProperties = Telefonszám +phoneNumberParams = Telefonszám +PhoneNumberListProperties = Telefonszám lista +PictureProperties = Kép +PressedEventEnabledProperties = Lenyomás esemény engedélyezve +PromptforPermissionProperties = Földrajzi helyzet engedély kérése +QueryProperties = Lekérdezés +RadiusProperties = Sugár +ReadModeProperties = Olvasás mód +ReceivingEnabledProperties = Üzenet fogadási mód +ReleasedEventEnabledProperties = Elengedés esemény engedélyezve +ResponseFileNameProperties = Elmentett HTTP válasz fájl neve +ResultNameProperties = Eredmény neve +RowsProperties = Sorok száma +SavedRecordingProperties = Hangfelvétel elérési útja +SaveResponseProperties = HTTP válasz elmentése fájlba +ScalePictureToFitProperties = Képarányos átméretezés +SensorPortProperties = Érzékelő port +ScreenOrientationProperties = Képernyőirány +SecureProperties = Biztonságos kapcsolat +ServiceAccountEmailProperties = Szolgáltatási e-mail cím +ServiceURLProperties = Szolgáltatás URL +ShowLoadingDialogProperties = Párbeszéd betöltést megmutat +FirebaseURLProperties = Firebase URL +PersistProperties = Offline működés +ProjectBucketProperties = Projekt konténer neve +DeveloperBucketProperties = Fejlesztői konténer neve +FirebaseTokenProperties = Firebase Token +PrivateUserStorageProperties = Privát felhasználói tárhely +ScrollableProperties = Görgethető +ShapeProperties = Alak +ShowFeedbackProperties = Animált kattintás +ShowTablesProperties = táblázatok mutatása +SourceProperties = Forrás +SpeedProperties = Sebesség +StopBeforeDisconnectProperties = Kapcsolat bontása előtt álljon le a motor +StopDetectionTimeoutProperties = Megállási idő +StrideLengthProperties = Lépéshossz +TextProperties = Szöveg +TextAlignmentProperties = Szöveg vízszintes igazítás +TextColorProperties = Szövegszín +TimerAlwaysFiresProperties = Háttérben is működik +TimerEnabledProperties = Időzítő bekapcsolva +TimerIntervalProperties = Időzítő intervallum +TitleProperties = Cím +TopOfRangeProperties = Érzékelési tartomány felső határa +UrlProperties = URL +UseFrontProperties = Elülső kamera használata +UseGPSProperties = GPS használata +UseServiceAuthenticationProperties = Belépés szolgáltatási e-mail címmel +UsesLocationVisibleProperties = Felhasználó földrajzi helyzete látható +VersionCodeProperties = Verzió kód +VersionNameProperties = Verzió név +TutorialURLProperties = Oktatási segédlet URL +SizingProperties = Képernyő méretezés +ShowListsAsJsonProperties = Listák megjelenítése JSON formátumban +VisibleProperties = Látható +VolumeProperties = Hangerő +WheelDiameterProperties = Kerék átmérő +WithinRangeEventEnabledProperties = Érzékelési tartományon belüli érték esemény bekapcsolva +XProperties = X +YProperties = Y +ZProperties = Z +VisibilityShowingProperties = látható +VisibilityHiddenProperties = rejtett +ElementsFromStringProperties = Lista elemek mint szöveg +RotatesProperties = Képes forgásra +RotationAngleProperties = Forgásszög +SelectionProperties = Kiválasztott elem +TimeIntervalProperties = Frissítéshez szükséges minimális idő +UsesLocationProperties = Földrajzi helyzet használata +ShowFilterBarProperties = Lista szűrés bekapcsolva +TextSizeProperties = Szövegméret +NotifierLengthProperties = Megjelenési idő +LoopProperties = Lejátszás automatikus újraindítása +PitchProperties = Y elfordulás +SpeechRateProperties = Beszéd tempó +SensitivityProperties = Érzékenység +TwitPic_API_KeyProperties = TwitPic API kulcs +PromptProperties = Cím +ColorLeftProperties = Csúszka baloldali színe +ColorRightProperties = Csúszka jobboldali színe +MaxValueProperties = Maximum érték +MinValueProperties = Minimum érték +ThumbPositionProperties = Csúszka érték +ThumbEnabled = Engedélyezett +DayProperties = Nap +MonthProperties = Hónap +MonthInTextProperties = Hónap neve +YearProperties = Év +LastMessageProperties = Utolsó üzenet +TextToWriteProperties = Elküldendő üzenet +WriteTypeProperties = Írási mód +ElapsedTimeProperties = Eltelt idő +SimpleStepsProperties = Lépések száma +WalkStepsProperties = Előre lépések száma +MovingProperties = Mozgásban van +HourProperties = Óra +MinuteProperties = Perc +DistanceProperties = Távolság +DirectMessagesProperties = Közvetlen üzenetek +ContactNameProperties = Névjegy név +CurrentAddressProperties = Jelenlegi cím +CurrentPageTitleProperties = Jelenlegi oldal címe +CurrentUrlProperties = Jelenlegi URL +AccuracyProperties = Pontosság +AddressesAndNamesProperties = Párosított nevek és címek +AltitudeProperties = Magasság +AngleProperties = Szög +AnimationProperties = Animáció +AvailableProperties = Elérhető +AvailableProvidersProperties = Elérhető szolgáltatók +AzimuthProperties = Z elfordulás +BallotOptionsProperties = Szavazás beállítások +BallotQuestionProperties = Szavazás tárgya +ContactUriProperties = Névjegy URI +EmailAddressProperties = E-mail cím +EmailAddressListProperties = E-mail címlista +ElementsProperties = Lista elemek +FollowersProperties = Követők +FriendTimelineProperties = Barátok üzenetei +FullScreenProperties = Teljes képernyős +HasAccuracyProperties = Van pontossága +HasAltitudeProperties = Van magassága +HasLongitudeLatitudeProperties = Van hosszúsága és szélessége +HeightProperties = Magasság +HeightPercentProperties = Magasság százalék +InstanceIdProperties = Példány azonosító +InvitedInstancesProperties = Meghívott példányok +IsAcceptingProperties = Kapcsolódásra vár +IsConnectedProperties = Kapcsolódott +IsPlayingProperties = Tart a lejátszás +JoinedInstancesProperties = Csatlakozott példányok +LatitudeProperties = Szélesség +LeaderProperties = Vezető +LongitudeProperties = Hosszúság +MagnitudeProperties = Lejtési sebesség +MentionsProperties = Említések +PasswordVisibleProperties = Jelszó látható +ProviderLockedProperties = Szolgáltató zárolva +ProviderNameProperties = Szolgáltató neve +PublicInstancesProperties = Nyilvános példányok +PlayOnlyInForegroundProperties = Lejátszás csak akkor, ha az alkalmazás előtérben van +PlayersProperties = Játékosok +RequestHeadersProperties = HTTP Kérés fejléc értékek +ResultProperties = Eredmény +UseExternalScannerProperties = Külső beolvasó program használata +ResultTypeProperties = Eredmény típusa +ResultUriProperties = Eredmény URI +RollProperties = X elfordulás +ScalingProperties = Képméretezés +SearchResultsProperties = Keresés eredményei +ServiceUrlProperties = Szolgáltatás URL +SelectionIndexProperties = Kiválasztott elem indexe +uriParams = URI +UserChoiceProperties = Felhasználó választása +UserEmailAddressProperties = Felhasználó e-mail cím +UserIdProperties = Felhasználó azonosító +UsernameProperties = Felhasználónév +usernameParams = felhasználónév +XAccelProperties = X gyorsulás +XAngularVelocityProperties = X szögsebesség +YAccelProperties = Y gyorsulás +YAngularVelocityProperties = Y szögsebesség +ZAccelProperties = Z gyorsulás +ZAngularVelocityProperties = Z Szögsebesség +WidthProperties = Szélesség +WidthPercentProperties = Szélesség százalék +WebViewStringProperties = Web nézet szöveg +WebViewStringChangeEvents = Web nézet szöveg változás +EnableSpeedRegulationProperties = Sebesség szabályozás +ModeProperties = Működési mód +MotorPortsProperties = Motor portok +ReverseDirectionProperties = Visszafelé mozog +SensorValueChangedEventEnabledProperties = Érzékelővel mért érték változott esemény engedélyezve +TachoCountChangedEventEnabledProperties = Tachométer érték változott esemény engedélyezve +UnitProperties = Egység +xAccelParams = x gyorsulás +yAccelParams = y gyorsulás +zAccelParams = z gyorsulás +resultParams = eredmény +tableIdParams = táblázat azonosító +columnsParams = oszlopok +conditionsParams = feltételek +valuesParams = értékek +otherParams = másik +componentParams = komponens +startXParams = start X +startYParams = start Y +prevXParams = előző X +prevYParams = előző Y +currentXParams = jelenlegi X +currentYParams = jelenlegi Y +edgeParams = oldal +speedParams = sebesség +headingParams = irány +xvelParams = x sebesség +yvelParams = y sebesség +targetParams = cél +addressParams = cím +uuidParams = UUID +numberOfBytesParams = bájtok száma +numberParams = szám +listParams = lista +textParams = szöveg +clipParams = videófájl elérési útja +imageParams = kép +draggedSpriteParams = elhúzott szereplő +draggedAnySpriteParams = van elhúzott szereplő +flungSpriteParams = elhajított szereplő +touchedSpriteParams = megérintett szereplő +touchedAnySpriteParams = van megérintett szereplő +xParams = x +yParams = y +centerXParams = középpont X +centerYParams = középpont Y +rParams = r +radiusParams = sugár +x1Params = x1 +x2Params = x2 +y1Params = y1 +y2Params = y2 +angleParams = szög +fileNameParams = fájlnév +colorParams = szín +yearParams = év +monthParams = hónap +dayParams = nap +hourParams = óra +minuteParams = perc +instantParams = pillanat +daysParams = nap +hoursParams = óra +minutesParams = perc +monthsParams = hónap +secondsParams = másodperc +weeksParams = hét +quantityParams = mennyiség +durationParams = időtartam +patternParams = minta +yearsParams = év +InstantInTimeParams = Időpillanat +fromParams = kezdő időpont +millisParams = ezredmásodperc +functionNameParams = függvénynév +permissionNameParams = engedélynév +errorNumberParams = hibaszám +messageParams = üzenet +mediafileParams = médiafájl paraméterek +otherScreenNameParams = másik képernyő neve +animTypeParams = animáció típusa +senderParams = küldő +contentsParams = tartalom +instanceIdParams = példány azonosító +playerIdParams = játékos azonosító +commandParams = parancs +argumentsParams = paraméter +responseParams = válasz +emailAddressParams = e-mail cím +typeParams = típus +countParams = mennyiség +makePublicParams = publikussá tesz +recipientsParams = címzettek +playerEmailParams = játékos e-mail +latitudeParams = szélességi fok +longitudeParams = hosszúsági fok +altitudeParams = magasság +providerParams = szolgáltató +statusParams = állapot +locationNameParams = hely neve +choiceParams = választás +noticeParams = üzenet +titleParams = cím +buttonTextParams = gomb szövege +cancelableParams = van mégse gomb +button1TextParams = első gomb szövege +button2TextParams = második gomb szövege +sourceParams = forrás +destinationParams = cél +sensorPortLetterParams = érzékelő port betűje +rxDataLengthParams = rx adat hossz +wildcardParams = fájlnév helyettesítő karakterekkel +motorPortLetterParams = motorport betűje +mailboxParams = levelezési fiók +durationMsParams = időtartam ezredmásodpercben +relativeParams = relatív +sensorTypeParams = érzékelő típus +sensorModeParams = érzékelő üzemmód +powerParams = sebesség +modeParams = üzemmód +regulationModeParams = szabályozási mód +turnRatioParams = fordulási arány +runStateParams = mozgási állapot +tachoLimitParams = tachométer határ +programNameParams = program neve +distanceParams = távolság +azimuthParams = z elfordulás +pitchParams = y elfordulás +rollParams = x elfordulás +simpleStepsParams = lépések száma +walkStepsParams = lépések száma +seedParams = mag +rendezvousServerParams = randi szerver +millisecsParams = ezredmásodpercek +soundParams = hang +messageTextParams = üzenet +tagParams = címke +valueParams = érték +valueToStoreParams = tárolandó érték +valueToAddParams = hozzáadandó érték +tagFromWebDBParams = címke +valueFromWebDBParams = érték +followers2Params = követők +timelineParams = legutóbbi üzenetek +mentionsParams = említések +searchResultsParams = keresési eredmények +userParams = felhasználó +urlParams = URL +responseCodeParams = válaszkód +responseTypeParams = válasz típusa +responseContentParams = válasz tartalma +htmlTextParams = HTML szöveg +jsonTextParams = JSON szöveg +pathParams = elérési út +encodingParams = szöveg kódolás +xmlTextParams = XML szöveg +nameParams = név +serviceNameParams = szolgáltatás neve +millisecondsParams = ezredmásodpercek +messagesParams = üzenetek +startParams = kezdete +endParams = vége +frequencyHzParams = frekvencia Hz +secureParams = biztonságos +fileParams = fájl +thumbPositionParams = csúszka érték +selectionParams = kiválasztott elem +valueIfTagNotThereParams = érték ha címke nem található +queryParams = keresési szöveg +imagePathParams = kép útvonal +msParams = ezredmásodperc +translationParams = fordítás +languageToTranslateToParams = célnyelv +textToTranslateParams = lefordítandó szöveg +xAngularVelocityParams = x szögsebesség +yAngularVelocityParams = y szögsebesség +zAngularVelocityParams = z szögsebesség +timestampParams = időbélyeg +colorCodeParams = színkód +colorNameParams = színneve +fillParams = kitöltés +frequencyParams = frekvencia +heightParams = magasság +noParams = sorszám +rateParams = ráta +sensorValueParams = érzékelő érték +tachoCountParams = tachométer érték +tachoCountsParams = tachométer értékek +useBrakeParams = fék használata +volumeParams = hangerő +widthParams = szélesség +AccelerationChangedEvents = Gyorsulás megváltozott +ActivityCanceledEvents = Aktivitást megszakították +AfterActivityEvents = Aktivitás befejeződött +CollidedWithEvents = Ütközött egy másik szereplővel +DraggedEvents = Arrébb húzták +EdgeReachedEvents = Elérte a rajzvászon szélét +FlungEvents = Elhajították +NoLongerCollidingWithEvents = Már nem ütközik a másik szereplővel +TouchDownEvents = Lenyomták +TouchUpEvents = Felengedték +TouchedEvents = Megérintették +AfterScanEvents = Vonalkód beolvasása megtörtént +ConnectionAcceptedEvents = Kapcsolódás megtörtént +ClickEvents = Kattintottak +GotFocusEvents = Fókuszba került +LongClickEvents = Hosszan kattintottak +RequestFocusMethods = Kerüljön fókuszba +LostFocusEvents = Elvesztette a fókuszt +ViewContactMethods = Névjegy megtekintése +AfterRecordingEvents = Elkészült a felvétel +AfterPictureEvents = Elkészült a fotó +ChangedEvents = Megváltozott +TimerEvents = Időzítőesemény +AfterPickingEvents = Elem ki lett választva +BeforePickingEvents = Lista elemek meg fognak jelenni +BackPressedEvents = Vissza gomb le lett nyomva +ErrorOccurredEvents = Hiba történt +InitializeEvents = Alkalmazás elindult +OtherScreenClosedEvents = Másik képernyő bezárult +PermissionDeniedEvents = Engedély megtagadva +PermissionGrantedEvents = Engedély megadva +ScreenOrientationChangedEvents = Képernyő iránya megváltozott +GotResultEvents = Megérkezett a lekérdezés eredménye +FunctionCompletedEvents = Befejeződött +GotMessageEvents = Üzenet érkezett +InfoEvents = Információ +InstanceIdChangedEvents = példány azonosító megváltozott +InvitedEvents = Meghívót kapott +NewInstanceMadeEvents = Új példány létrejött +NewLeaderEvents = Új vezető lett megválasztva +PlayerJoinedEvents = Új játékos csatlakozott +PlayerLeftEvents = Játékos távozott +ServerCommandFailureEvents = Szerverparancs hiba +ServerCommandSuccessEvents = Szerverparancs sikeresen végrehajtódott +UserEmailAddressSetEvents = Felhasználó e-mail címe be lett állítva +WebServiceErrorEvents = Webszolgáltatás hiba +FirebaseErrorEvents = Firebase hiba +LocationChangedEvents = Helyzet megváltozott +StatusChangedEvents = Állapot változott +AfterChoosingEvents = Megtörtént a választás +AfterTextInputEvents = Megtörtént a szövegbevitel +ChoosingCanceledEvents = Kiválasztás megszakítva +TextInputCanceledEvents = Szövegbevitel megszakítva +AboveRangeEvents = Érzékelési tartomány feletti érték +BelowRangeEvents = Érzékelési tartomány alatti érték +ColorChangedEvents = Szín megváltozott +WithinRangeEvents = Érzékelési tartományon belüli érték +PressedEvents = Lenyomták +ReleasedEvents = Felengedték +OrientationChangedEvents = Készülék iránya változott +CalibrationFailedEvents = Kalibráció nem sikerült +GPSAvailableEvents = GPS elérhetővé vált +GPSLostEvents = GPS jel elveszett +SimpleStepEvents = Egy lépés +StartedMovingEvents = Mozgás elindult +StoppedMovingEvents = Mozgás megállt +WalkStepEvents = Előre lépés +CompletedEvents = Befejeződött +AfterSoundRecordedEvents = Hangfelvétel elkészült +StartedRecordingEvents = Hangrögzítés elindult +StoppedRecordingEvents = Hangrögzítés megállt +AfterGettingTextEvents = Beszédfelismerés befejeződött +BeforeGettingTextEvents = Beszédfelismerés elkezdődött +AfterSpeakingEvents = Felolvasás véget ért +BeforeSpeakingEvents = Felolvasás el fog kezdődni +MessageReceivedEvents = Üzenet érkezett +SendMessageEvents = Üzenet küldése +GotValueEvents = Megérkezett a lekérdezés eredménye +TagListEvents = Címke lista megérkezett +ValueStoredEvents = Adat írása befejeződött +DataChangedEvents = Adat megváltozott +DirectMessagesReceivedEvents = Közvetlen üzenet érkezett +FollowersReceivedEvents = Követők listája megérkezett +FriendTimelineReceivedEvents = Barátok legutóbbi üzenetei megérkeztek +IsAuthorizedEvents = Sikeresen bejelentkezett +MentionsReceivedEvents = Említések listája megérkezett +SearchSuccessfulEvents = Keresés sikeresen befejeződött +GotBallotEvents = Van szavazás +GotBallotConfirmationEvents = Megérkezett a szavazatod +NoOpenPollEvents = Nincs szavazás +GotFileEvents = Fájl letöltés befejeződött +GotTextEvents = Szöveges tartalom beolvasása befejeződött +AfterFileSavedEvents = Fájl írása befejeződött +AfterDateSetEvents = Dátum ki lett választva +TagReadEvents = Üzenet érkezett +TagWrittenEvents = Üzenet el lett küldve +PositionChangedEvents = Pozíció megváltozott +AfterSelectingEvents = Lista elem ki lett választva +AfterTimeSetEvents = Időpont ki lett választva +GotTranslationEvents = Elkészült a fordítás +ShakingEvents = Rázkódik +GyroscopeChangedEvents = Giroszkóp által mért értékek megváltoztak +TachoCountChangedEvents = Tachométer érték megváltozott +SensorValueChangedEvents = Érzékelt érték megváltozott +ResolveActivityMethods = Elérhető aktivitás nevének lekérdezése +StartActivityMethods = Aktivitás indítása +ConnectMethods = Kapcsolódás +ConnectWithUUIDMethods = Kapcsolódás UUID azonosítóval +DisconnectMethods = Kapcsolat bontása +IsDevicePairedMethods = Össze van-e párosítva +ReceiveSigned1ByteNumberMethods = Fogadás előjeles 1 bájtból szám +ReceiveSigned2ByteNumberMethods = Fogadás előjeles 2 bájtból szám +ReceiveSigned4ByteNumberMethods = Fogadás előjeles 4 bájtból szám +ReceiveSignedBytesMethods = Fogadás előjeles bájtok +ReceiveTextMethods = Fogadás szöveg +ReceiveUnsigned1ByteNumberMethods = Fogadás előjel nélküli 1 bájtból szám +ReceiveUnsigned2ByteNumberMethods = Fogadás előjel nélküli 2 bájtból szám +ReceiveUnsigned4ByteNumberMethods = Fogadás előjel nélküli 4 bájtból szám +ReceiveUnsignedBytesMethods = Fogadás előjel nélküli bájtok +Send1ByteNumberMethods = Küldés 1 bájtból szám +Send2ByteNumberMethods = Küldés 2 bájtból szám +Send4ByteNumberMethods = Küldés 4 bájtból szám +SendBytesMethods = Küldés 1 bájt +SendTextMethods = Küldés szöveg +AcceptConnectionMethods = Kapcsolódási kísérlet fogadása +AcceptConnectionWithUUIDMethods = Kapcsolódási kísérlet fogadása UUID-vel +BytesAvailableToReceiveMethods = Érkezett bájtok száma +StopAcceptingMethods = Üzenet fogadás befejezése +RecordVideoMethods = Készíts felvételt +TakePictureMethods = Készíts fotót +ClearMethods = Törlés +DrawCircleMethods = Kör rajzolás +DrawLineMethods = Vonal rajzolás +DrawPointMethods = Pont rajzolás +DrawTextMethods = Szöveg rajzolás +DrawTextAtAngleMethods = Elforgatott szöveg rajzolás +GetBackgroundPixelColorMethods = Háttér képpont színének lekérdezése +GetPixelColorMethods = Képpont színének lekérdezése +SaveMethods = Mentés +SaveAsMethods = Mentés másként +SetBackgroundPixelColorMethods = Háttér képpont kiszínezése +AddDurationMethods = Időtartam hozzáadása +AddDaysMethods = Napok hozzáadása +AddHoursMethods = Órák hozzáadása +AddMinutesMethods = Percek hozzáadása +AddMonthsMethods = Hónapok hozzáadása +AddSecondsMethods = Másodpercek hozzáadása +AddWeeksMethods = Hetek hozzáadása +AddYearsMethods = Évek hozzáadása +DayOfMonthMethods = Hónap hányadik napja +DurationMethods = Időtartam +DurationToSecondsMethods = Eltelt időből másodpercek +DurationToMinutesMethods = Eltelt időből percek +DurationToHoursMethods = Eltelt időből órák +DurationToDaysMethods = Eltelt időből napok +DurationToWeeksMethods = Eltelt időből hetek +FormatDateMethods = Dátum szöveggé alakítása +FormatDateTimeMethods = Dátum és idő szöveggé alakítása +FormatTimeMethods = Idő szöveggé alakítása +GetMillisMethods = Ezredmásodpercekre váltás +HourMethods = Óra +InstantMethods = Pillanat érték +MakeInstantMethods = Pillanat érték létrehozása +MakeInstantFromMillisMethods = Pillanat érték létrehozása ezredmásodpercekből +MinuteMethods = Perc +MonthMethods = Hónap +MonthNameMethods = Hónap neve +NowMethods = Most +SecondMethods = Másodperc +SystemTimeMethods = Rendszeridő +WeekdayMethods = Hét hányadik napja +WeekdayNameMethods = Nap neve +YearMethods = Év +OpenMethods = Megnyitás +CloseScreenAnimationMethods = Záró animáció típusa +OpenScreenAnimationMethods = Nyitó animáció típusa +DoQueryMethods = Fusion table parancs +ForgetLoginMethods = Kijelentkezés +SendQueryMethods = Lekérdezés elküldése +GetInstanceListsMethods = Példányok lekérdezése +GetMessagesMethods = Üzenetek lekérdezése +InviteMethods = Meghívás +LeaveInstanceMethods = Példány elhagyása +MakeNewInstanceMethods = Új példány létrehozása +ServerCommandMethods = Szerver parancs küldése +SetInstanceMethods = Példány beállítása +SetLeaderMethods = Vezető kinevezése +BounceMethods = Pattanj vissza +CollidingWithMethods = Ütköznek-e +MoveIntoBoundsMethods = Helyezkedj a rajzvászon belsejébe +MoveToMethods = Ugorj helyre +PointInDirectionMethods = Nézz egy megadott pont irányába +PointTowardsMethods = Nézz egy célszereplő irányába +LatitudeFromAddressMethods = Cím hosszúsági foka +LongitudeFromAddressMethods = Cím szélességi foka +LogErrorMethods = Hibaüzenet naplózása +LogInfoMethods = Információ üzenet naplózása +LogWarningMethods = Figyelmeztető üzenet naplózása +ShowAlertMethods = Ideiglenes figyelmeztető ablak +ShowChooseDialogMethods = Választás ablak megjelenítése +ShowMessageDialogMethods = Szöveges üzenet ablak megjelenítése +ShowTextDialogMethods = Szövegbevitel ablak megjelenítése +ShowProgressDialogMethods = Folyamatábrázoló ablak megjelenítése +DismissProgressDialogMethods = Folyamatábrázoló ablak eltüntetése +GetColorMethods = Szín lekérdezése +GetLightLevelMethods = Fényerő lekérdezése +DeleteFileMethods = Fájl törlése +DownloadFileMethods = Fájl letöltése +GetBatteryLevelMethods = Akkumulátor töltöttségi szint lekérdezése +GetBrickNameMethods = Tégla név lekérdezése +GetCurrentProgramNameMethods = Aktuális program nevének lekérdezése +GetFirmwareVersionMethods = Firmware verzió lekérdezése +GetInputValuesMethods = Szenzor bemeneti értékek lekérdezése +GetOutputStateMethods = Motor kimeneti állapotának lekérdezése +KeepAliveMethods = Maradj ébren +ListFilesMethods = Fájlok listázása +LsGetStatusMethods = Beolvasásra váró bájtok száma +LsReadMethods = Beolvasás portról +MessageReadMethods = Üzenet olvasása +MessageWriteMethods = Üzenet írása +PlaySoundFileMethods = Hangfájl lejátszása +PlayToneMethods = Tónus lejátszása +ResetInputScaledValueMethods = Érzékelő bemenet alaphelyzetbe állítása +ResetMotorPositionMethods = Motor alaphelyzetbe állítása +SetBrickNameMethods = Tégla név beállítása +SetInputModeMethods = Érzékelő bemeneti mód beállítása +SetOutputStateMethods = Kimeneti állapot beállítása +StartProgramMethods = Program indítása +StopProgramMethods = Program leállítása +StopSoundPlaybackMethods = Hanglejátszás leállítása +LsWriteMethods = Írás portra +MoveBackwardMethods = Tolatás +MoveBackwardIndefinitelyMethods = Tolatás meghatározatlan ideig +MoveForwardMethods = Mozgás előre +MoveForwardIndefinitelyMethods = Mozgás előre meghatározatlan ideig +StopMethods = Megállás +TurnClockwiseIndefinitelyMethods = Fordulás óramutató járásával megegyező irányban +TurnCounterClockwiseIndefinitelyMethods = Fordulás óramutató járásával ellentétes irányban +GetSoundLevelMethods = Hangerő lekérdezése +IsPressedMethods = Le van nyomva +GetDistanceMethods = Távolság lekérdezése +PauseMethods = Megállítás +ResetMethods = Újrakezdés +ResumeMethods = Folytatás +StartMethods = Indítás +MakePhoneCallMethods = Telefonhívás indítása +GetWifiIpAddressMethods = Wifi IP cím lekérdezése +isConnectedMethods = csatlakozvaVan +setHmacSeedReturnCodeMethods = HMAC mag visszatérési kód beállítása +startHTTPDMethods = HTTPD indítása +VibrateMethods = Rezgetés +GetTextMethods = Beszédfelismerés +HideKeyboardMethods = Billentyűzet elrejtése +AskForPermissionMethods = Engedély kérése +SpeakMethods = Felolvasás +SendMessageMethods = Üzenetküldés +GetValueMethods = Adat lekérdezése +StoreValueMethods = Adat írása +GetTagListMethods = Címke lista lekérdezése +AppendValueMethods = Új elem beillesztése +RemoveFirstMethods = Első elem törlése +AppendValueToListMethods = Elem hozzáadása listához +RemoveFirstFromListMethods = Első lista elem törlése +FirstRemovedEvents = Első elem el lett távolítva +InitializeValueMethods = Kezdő értékadás +AuthorizeMethods = Bejelentkezés +CheckAuthorizedMethods = Be van-e jelentkezve +DeAuthorizeMethods = Kiléptetés +DirectMessageMethods = Közvetlen üzenet küldés +FollowMethods = Követés +RequestDirectMessagesMethods = Közvetlen üzenetek lekérdezése +RequestFollowersMethods = Követők lekérdezése +RequestFriendTimelineMethods = Barátok üzeneteinek lekérdezése +RequestMentionsMethods = Említések lekérdezése +SearchTwitterMethods = Twitter keresés +SetStatusMethods = Státusz beállítása +StopFollowingMethods = Követés leállítása +GetDurationMethods = Videó hosszának lekérdezése +SeekToMethods = Ugrás +DoScanMethods = Vonalkód beolvasás +RequestBallotMethods = Szavazás kérvényezése +SendBallotMethods = Szavazási adatok küldése +BuildPostDataMethods = Feltöltési adatok felépítése +ClearCookiesMethods = Sütik törlése +GetMethods = Letöltés (GET) +HtmlTextDecodeMethods = HTML szöveg dekódolása +JsonTextDecodeMethods = JSON szöveg dekódolása +xmlTextDecodeMethods = XML szöveg dekódolása +PostFileMethods = Fájl küldése (POST) +PostTextMethods = Szöveg küldése (POST) +PostTextWithEncodingMethods = Szöveg küldése kódolással (POST) +UriEncodeMethods = URI kódolás +UriDecodeMethods = URI dekódolás +CanGoBackMethods = Vissza tud lépni +CanGoForwardMethods = Előre tud lépni +ClearLocationsMethods = Elmentett földrajzi helyek törlése +ClearCachesMethods = Gyorsítótár törlése +GoBackMethods = Visszalépés +GoForwardMethods = Előrelépés +GoHomeMethods = Kezdőlapra ugrás +GoToUrlMethods = Weboldal betöltése +AppendToFileMethods = Hozzáfűzés fájl végéhez +DeleteMethods = Törlés +ReadFromMethods = Fájlból olvasás +SaveFileMethods = Fájl mentése +doFaultMethods = hiba +getVersionNameMethods = verziónév +installURLMethods = telepítési URL +isDirectMethods = közvetlen +setAssetsLoadedMethods = betöltendő erőforrások +shutdownMethods = leállítás +ShareFileMethods = Fájl megosztása +ShareFileWithMessageMethods = Fájl megosztása üzenettel +ShareMessageMethods = Üzenet megosztása +PlayMethods = Lejátszás +DisplayDropdownMethods = Lista megjelenítése +ClearAllMethods = Minden adat törlése +ClearTagMethods = Adat törlése +GetTagsMethods = Címkék lekérdezése +TweetMethods = Tweet +TweetWithImageMethods = Tweet képpel +BuildRequestDataMethods = Szöveges HTTP kérés előállítása +PutFileMethods = Fájl feltöltés (PUT) +PutTextMethods = Szöveg feltöltés (PUT) +PutTextWithEncodingMethods = Szöveg feltöltés kódolással (PUT) +RequestTranslationMethods = Fordítás elindítása +GetBatteryCurrentMethods = Akkumulátor áram lekérdezése +GetBatteryVoltageMethods = Akkumulátor feszültségszint lekérdezése +GetHardwareVersionMethods = Hardver verzió lekérdezése +SetAngleModeMethods = Orientáció mérési üzemmód beállítása +SetRateModeMethods = Szögsebesség mérési üzemmód beállítása +SetCmUnitMethods = Centiméter mértékegység beállítása +SetInchUnitMethods = Hüvelyk mértékegység beállítása +SetColorModeMethods = Színérzékelési mód beállítása +SetReflectedModeMethods = Reflektált fényérzékelési mód beállítása +SetAmbientModeMethods = Környező fényérzékelési mód beállítása +RotateIndefinitelyMethods = Forgás meghatározatlan ideig +RotateInDistanceMethods = Forgás távolság alapján +RotateInDurationMethods = Forgás időtartam alapján +RotateInTachoCountsMethods = Forgás tachométer érték alapján +RotateSyncIndefinitelyMethods = Forgás azonos sebességgel meghatározatlan ideig +RotateSyncInDistanceMethods = Forgás azonos sebességgel távolság alapján +RotateSyncInDurationMethods = Forgás azonos sebességgel időtartam alapján +RotateSyncInTachoCountsMethods = Forgás azonos sebességgel tachométer érték alapján +ToggleDirectionMethods = Irányváltoztatás +GetTachoCountMethods = Tachométer érték lekérdezése +ResetTachoCountMethods = Tachométer alaphelyzetbe állítása +GetSensorValueMethods = Érzékelő érték lekérdezése +GetColorCodeMethods = Színkód lekérdezése +GetColorNameMethods = Szín nevének lekérdezése +FillScreenMethods = Képernyő kitöltése +DrawRectMethods = Téglalap rajzolás +DrawIconMethods = Ikon rajzolás +GetOSVersionMethods = Operációs rendszer verzió lekérdezése +GetOSBuildMethods = Operációs rendszer építési számának lekérdezése +GetFirmwareBuildMethods = Firmware építési számának lekérdezése +SetPowerMethods = Sebesség beállítása +StopSoundMethods = Hanglejátszás leállítása +MockSpinnerAddItems = elemek hozzáadása... +AccelerometerSensorHelpStringComponentPallette = Láthatatlan komponens, amely képes érzékelni ha valaki rázza a telefont és a készülék gyorsulását három dimenzióban (m/s2). A három dimenziót az alábbi változók képviselik:
      \n
    • x-gyorsulás: 0 ha a készülék sima felszínen fekszik mozdulatlanul, pozitív szám ha jobb oldalra dől (vagyis a bal széle emelkedik), és negatív szám ha bal oldalra dől (vagyis a jobb széle emelkedik).
    • \n
    • y-gyorsulás: 0 ha a készülék sima felszínen fekszik mozdulatlanul, pozitív szám ha a készülék alja emelkedik, negatív ha a teteje.
    • \n
    • z-gyorsulás: -9.8 m/s2 (a Föld gravitációs erejének megfelelő nagyságú) ha a készülék párhuzamos helyzetben van a földdel és a képernyője felfelé néz, 0 ha merőleges a földre (valamelyik élén áll), és +9.8 ha lefelé néz. Az is befolyásolja ezt az értéket ha a telefont a föld irányába vagy azzal ellentétesen mozgatjuk.
    +ActivityStarterHelpStringComponentPallette =

    A komponens AktivitásIndítása parancsával egy Androidos aktivitást indíthatunk el (egy aktivitás nagyon sokféle tevékenységet jelenthet, lásd a példákat).

    Ezt több célra is felhasználhatjuk:

      \n
    • egy másik App Inventorban létrehozott alkalmazás elindítása
    • \n
    • a kamera alkalmazás elindítása
    • \n
    • webes keresés elindítása
    • \n
    • a böngésző megnyitása egy megadott URL-el
    • \n
    • a térkép alkalmazás megnyitása egy konkrét hellyel
    \nOlyan Androidos aktivitás is elindítható vele, amely szöveges adattal tér vissza.

    +BallHelpStringComponentPallette =

    Egy kör alakú \"szereplő\", amelyet ha egy Rajzvászon komponensre helyezünk, akkor képes reagálni a tapintásra és húzásra, valamint kapcsolatba léphet a többi szereplővel (pl: ütközés vizsgálata).

    A labda mozgása az Irány, FrissítésiIntervallum és a Sebesség tulajdonságokon keresztül. Ha például azt akarjuk hogy a labda felfelé mozogjon másodpercenként 4 képpontnyival, akkor az elérhető úgy, hogy az Irány 90 [fok], a FrissítésiIntervallum 1000 [ezredmásodperc], a a Sebesség pedig 4.

    A labda kinézetét csak a Sugár és a Szín tulajdonságokkal állítható be (teljesen egyedi kinézethez használd a Szereplő komponenst és állítsd be annak Kép tulajdonságát.

    +BarcodeScannerHelpStringComponentPallette = A komponens grafikus vonalkódokat képes beolvasni és szöveggé alakítani. +BluetoothClientHelpStringComponentPallette = Bluetooth kliens komponens. Egy Bluetooth szerverhez lehet vele kapcsolódni. +BluetoothServerHelpStringComponentPallette = Bluetooth szerver komponens. Egy vagy több Bluetooth kliens kapcsolódhat hozzá. +ButtonHelpStringComponentPallette = Gomb vezérlő, amely képes érzékelni ha rákattintanak. A képernyő szerkesztőben vagy akár a blokk szerkesztőben is testre szabható a kinézete, de akár az is hogy képes legyen-e kattintások érzékelésére (Enabled). +CamcorderHelpStringComponentPallette = A komponens segítségével videó felvételt készíthetünk a készülék kamerájával. A felvétel elkészülte után kerül végrehajtásra az ElkészültAFelvétel esemény, amelynek paramétereként megkapjuk a videót tároló fájl teljes elérési útját. Ezt később felhasználhatjuk például arra, hogy egy videó lejátszó komponens MédiaTartalomElérésiÚtja tulajdonságát beállítsuk rá. +CameraHelpStringComponentPallette = A komponens segítségével egy fotót készíthetünk a készülék kamerájával. A felvétel elkészülte után kerül végrehajtásra az elkészült a fotó esemény, amelynek paramétereként megkapjuk a fotót tároló fájl nevét. Ezt később felhasználhatjuk például arra, hogy egy Kép komponens Kép forrása tulajdonságát beállítsuk rá. +CanvasHelpStringComponentPallette =

    Egy téglalap alakú terület a képernyőn, amelyre szereplőket lehet rajzolni és reagál az érintésekre.

    A szereplők helyzetét (X, Y) koordinátákkal lehet megadni, ahol:

    • X a szereplő vízszintes távolsága (képpontban) a rajzvászon bal szélétől
    • Y a szereplő függőleges távolsága (képpontban) a rajzvászon tetejétől

    Érintésre/húzásra eseményekkel reagál, amelyeket a Blokk Szerkesztőben lehet kezelni.

    Vonalakat, téglalapokat, köröket és más alakzatokat lehet rá rajzolni.

    +CheckBoxHelpStringComponentPallette = Jelelő négyzet vezérlő, amely képes érzékelni ha rákattintanak. Kétféle állapota lehet: vagy ki van pipálva vagy nincs. A Képernyő Szerkesztőben és Blokk Szerkesztőben is testre szabható a kinézete. +ClockHelpStringComponentPallette =

    Láthatatlan komponens, amellyel lekérdezhető az aktuális idő és időzítésre is használható (adott időközönként végrehajtani egy feladatot).

    Ugyancsak képes dátumok szöveggé alakítására, ahol ha nem adunk meg formátumot, akkor az alapértelmezettet használja: \"MMM d, yyyy HH:mm:ss a\" (pl: Jan 8, 2008 11:35:00 AM). A lehetséges formátumokról itt olvashatsz.

    +ContactPickerHelpStringComponentPallette =

    Egy gomb, amelyet ha lenyomunk, megjeleníti a készüléken található névjegyek listáját. Miután a felhasználó kiválasztott közülük egyet, az alábbi információk állnak rendelkezésre a NévjegyKiLettVálasztva blokkban:

      \n
    • Névjegy név: a névjegyhez tartozó személy/cég neve
    • \n
    • E-mail cím: a névjegyhez tartozó elsődleges e-mail cím
    • \n
    • NévjegyUri: névjegy erőforrás azonosítója (URI) a készüléken
    • \n
    • Kép: a névjegyhez tartozó kép fájl elérési útja, amely értéket felhasználhatjuk egy Kép vagy egy Szereplő komponens Kép forrása mezőjének beállításánál.
    \n

    Vannak egyéb tulajdonságai, amelyek a gomb kinézetét módosítják (Szöveg víszintes igazítás, Háttérszín, stb.), illetve az hogy a gombra rá lehet-e kattintani (Engedélyezett).

    Nem mindegyik készülék támogatja a névjegyek kiválasztását. Hiba esetén egy felugró üzenetablakban lesz látható a hiba oka, de ezt a viselkedést felülírhatjuk a Képernyő komponens HibaTörtént blokkjában.

    +DatePickerHelpStringComponentPallette =

    Egy gomb, amely kattintásra egy felugró ablakot jelenít meg, amelyben egy dátumot választhatunk ki.

    +EmailPickerHelpStringComponentPallette =

    Az EmailCímVálasztó egy szöveges beviteli mező, amelybe ha elkezdünk írni, akkor megjeleníti azoknak a tárolt e-mail címeket, amelyek a már begépelt szöveggel kezdődnek. Ha a list túl hosszú a lista, akkor több másodpercet is igénybe vehet annak betöltése. Ilyenkor egy ideiglenes eredményt jelenít meg a rendszer, amíg a teljes lista el nem készül.

    A begépelt szöveg a Szöveg mezőben található, ha ez üres, akkor pedig Segítség/Tipp mező tartalma lesz látható.

    \n

    Vannak egyéb tulajdonságai, amelyek a gomb kinézetét módosítják (SzövegVíszintesIgazítás, Háttérszín, stb.), illetve az hogy a gombra rá lehet-e kattintani (Engedélyezett).

    A szöveges beviteli mezőket sokszor használjuk a Gomb komponenssel együtt, amikor is a felhasználó a szöveg beírása után rákattint egy gombra.

    +Ev3MotorsHelpStringComponentPallette = Magas és alacsony szintű hozzáférést is biztosít a LEGO MINDSTORMS EV3 robot mozgását irányító motorhoz. +Ev3TouchSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 roboton található érintés érzékelőhöz. +Ev3GyroSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 roboton található giroszkóphoz. +Ev3ColorSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 roboton található színérzékelő eszközhöz. +Ev3UltrasonicSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 roboton található ultrahang érzékelőhöz. +Ev3CommandsHelpStringComponentPallette = Alcsony szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 robothoz, közvetlen parancsokat küldhetünk vele az eszközre. +Ev3UIHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 robot grafikus képességeihez. +Ev3SoundHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS EV3 roboton található hanglejátszóhoz. +FileHelpStringComponentPallette = Láthatatlan komponens, amellyel fájlokat írhatunk és olvashatunk. Alapértelmezetten az alkalmazáshoz rendelt privát adatkönyvtárba írja az állományokat. A Companion segédalkalmazás az /sdcard/AppInventor/data könyvtárt használja fájlok írására, a hibakövetés (debugging) elősegítésére. Ha a fájl elérési útja perjellel (/) kezdődik, akkor a program azt az /sdcard mappához viszonyítva értelmezi. Például /alma.txt esetén a tényleges elérési út /sdcard/alma.txt lesz. +FormHelpStringComponentPallette = Legfelsőbb szintű komponens, amely magába foglal minden más komponenst az alkalmazásban. +FusiontablesControlHelpStringComponentPallette =

    Láthatatlan komponens, amellyel Google Fusion Tables adatabázisokat használhatunk, új táblákat hozhatunk létre, módosíthatjuk a már meglévőket és lekérdezhetjük a bennük tárolt adatokat.

    A komponens a Fusion Tables API 2.0 verzióját használja.

    Ha használni akarjuk ezt a komponenst, akkor ehhez be kell jelentkezni a Google megfelelő szerverére. Ezt kétféleképpen lehet megtenni. Egyrészt be lehet jelentkezni az API Kulcs használatával, amit fejlesztőként igényelhetünk (lásd lejjebb). Ha ezt a megoldást választjuk akkor az alkalmazás felhasználójának is be kell jelentkeznie a Fusion Tables használata előtt. A másik lehetőség az ún. Szolgáltatási Fiókkal (Service Account) történő bejelentkezés. Ehhez először létre kell hozni egy ún. Szolgáltatási E-mail Címet (Service Account E-mail Address), amelyet a Google API Konzol felületén lehet megtenni. Ezután Fusion Table Vezérlőn (Fusion Table Control) be kell állítani a Szolgáltatási E-mail Címet, majd a mobilalkalmazás erőforrásként feltölteni a titkos kulcsot és beállítani rá a KulcsFájl tulajdonságát a komponensnek. Legvégül pedig a \"belépés szolgáltatási e-mail címmel\" mezőt ki kell pipálni. Szolgáltatási Fiók használata esetén a Fusion Tables adatabázisokhoz való összes azon keresztül történik majd, a mobilalkalmazás felhasználójának nem kell hozzá bejelentkeznie.

    Az API Kulcs megszerzéséhez az alábbiakat kell tenni:

    1. Nyisd meg a Google API Konzolt és jelentkezz be amennyiben az szükséges.
    2. Válaszd ki a Szolgáltatások (Services) menüpontot a bal oldali menüből.
    3. Válaszd ki a Fusion tables szolgáltatást a listából és kapcsold be.
    4. Menj vissza a főmenübe és válaszd ki a API Hozzáférés (API Access) menüpontot.

    Az API Kulcsod a panel alján, az Egyszerű API Hozzáférés (Simple API Access) szekcióban. Ezt az értéket kell megadnod a komponens APIKulcs mezőjében a Fusion Tables technológiát használó alkalmazásodban.

    Az API Kulcs beállítása után, írj be a Lekérdezés mezőbe egy érvényes Fusiontables SQL lekérdező parancsot és hívd meg a LekérdezésElküldése blokkot a parancs lefuttatásához. Az App Inventor ekkor elküldi a parancsot a Fusion Tables szervernek, majd a MegérkezettALekérdezésEredménye esemény meghívásával jelzi hogy megjött az eredmény. A lekérdezés eredményét CSV formában kapjuk vissza, amely listává alakítható a \"készíts listát CSV táblázatból\" or \"készíts listát CSV sorból\" blokkokkal.

    A parancs szövegének UTF-kódolásával nem kell külön foglalkozni, viszont követni kell a Fusion Tables Kézikönyvben megadott szintaxist, amely többek között azt jelenti, hogy az oszlopok neveinél meg kell különböztetnünk a kis- és nagy betűket, valamint aposztrófok közé kell tenni azokat, ha szóközt tartalmaznak.

    +GameClientHelpStringComponentPallette = Lehetővé teszi hogy az alkalmazás internetes játékszerverekkel kommunikáljon. +GyroscopeSensorHelpStringComponentPallette =

    Láthatatlan komponens, amely a készülék szögsebességét (fok / sec) méri három dimenzióban.

    A helyes működéshez a készüléknek rendelkeznie kell giroszkóppal, valamint az Engedélyezett mezőt Igaz értékre kell állítani.

    +HorizontalArrangementHelpStringComponentPallette =

    Egy olyan elrendező elem, amely a belé rakott komponenseket balról jobbra jeleníti meg. Ha azt szeretnéd, hogy a komponenseket inkább egymás alá helyezze, akkor a FüggőlegesElrendezés vezérlőt érdemes használnod.

    +HorizontalScrollArrangementHelpStringComponentPallette =

    Egy olyan elrendező elem, amely a belé rakott komponenseket balról jobbra jeleníti meg. Ha azt szeretnéd, hogy a komponenseket inkább egymás alá helyezze, akkor a FüggőlegesElrendezés vezérlőt érdemes használnod.

    Ez a komponens görgethető (ha a benne lévő elemek nem férnek mind ki).

    +ImageHelpStringComponentPallette = Képek ábrázolására szolgáló komponens. A Képernyő Szerkesztőben és a Blokk Szerkesztőben is beállítható a kép forrása, szélessége, magassága és egyéb tulajdonságai is. +ImagePickerHelpStringComponentPallette = Egy olyan gomb, amely megnyitja a készülék fotógalériáját és lehetőséget ad egy kép kiválasztására. Ezután a kiválasztott képet elmenti egy fájlba, amelynek elérési útját a komponens KépElérésiÚtja tulajdonsága tartalmazza majd. Legfeljebb 10 fotót lehet ezzel elmenteni. Ha azon felül is kijelölünk egyet, akkor az felülírja a legrégebben kiválasztott képet. +ImageSpriteHelpStringComponentPallette =

    Egy kétdimenziós kép, amelyet ha egy Rajzvászon komponensre helyezünk, akkor képes reagálni a tapintásra és húzásra, valamint kapcsolatba léphet a többi szereplővel (pl: ütközés vizsgálata).

    A labda mozgása az Irány, FrissítésiIntervallum és a Sebesség tulajdonságokon keresztül. Ha például azt akarjuk hogy a labda felfelé mozogjon másodpercenként 4 képpontnyival, akkor az elérhető úgy, hogy az Irány 90 [fok], a FrissítésiIntervallum 1000 [ezredmásodperc], a a Sebesség pedig 4.

    Ha a KépesForgásra tulajdonság Igaz értékre van beállítva, akkor a szereplőnek beállított kép az Irány tulajdonság szerint megadott irányba fordul.

    Ha ütközés vizsgálatakor a szereplő el van forgatva, akkor is valójában az el nem forgatott változatot használja a rendszer a vizsgálathoz, ezért az nem biztos hogy mindig pontos lesz.

    +LabelHelpStringComponentPallette = A Címke komponens egy szöveg ábrázolására szolgál. A Képernyő Szerkesztőben és a Blokk Szerkesztőben is beállítható a tartalma a Szöveg tulajdonságán keresztül, valamint az elhelyezése, a betűk mérete és egyéb jellemzői is. +ListPickerHelpStringComponentPallette =

    Egy gomb, amely kattintásra egy szöveges listát jelenít meg, amelyből a felhasználó kiválaszthat egy listaelemet. A lista elemei a ListaElemekMintSzöveg tulajdonságon keresztül állíthatók be (vesszővel elválasztva, pl: első elem, második elem, harmadik elem) a Képernyő Szerkesztőben vagy a Blokk Szerkesztőben. Ugyancsak beállíthatjuk, ha a Blokk Szerkesztőben egy lista értéket rendelünk a ListaElemek mezőhöz.

    A ListaSzűrésBekapcsolva tulajdonságot igaz értékre állítva lehetővé tehetjük a keresést a listaelemek között. További tulajdonságaival állítható például a gomb megjelenítése (SzövegVíszintesIgazítás, HáttérSzín, stb.) és hogy rá reagál-e kattintásra (Engedélyezett).

    +ListViewHelpStringComponentPallette =

    Egy szöveges listát megjelenítő komponens.
    A lista elemei a ListaElemekMintSzöveg tulajdonságon keresztül állíthatók be, vagy a Blokk Szerkesztőben a ListaElemek mezőnek értéket adva.

    +LocationSensorHelpStringComponentPallette =

    Láthatatlan komponens, amely a készülék földrajzi helyzetéről ad információt, többek között a szélességi és hosszúsági fokról, magasságról (ha az eszköz támogatja), sebességéről, valamint címéről. Képes \"geokódolásra\" is, vagyis a szövegesen megadott címnek visszaadja a földrajzi koordinátáit: a szélességi fokát a CímSzélességiFoka blokk, a hosszúsági fokot pedig CímHosszúságiFoka blokk adja vissza.

    Működéséhez az Engedélyezett tulajdonságot Igaz értékre kell állítani, valamint a készülék képes kell hogy legyen GPS-en vagy mobil hálózaton keresztül meghatározni a jelenlegi földrajzi koordinátákat.

    Az alkalmazás indításakor még nem biztos hogy rendelkezésre állnak ezek az információk, lehet hogy várni kell rá egy kicsit, érdemes lehet feliratkozni a HelyzetMegváltozott eseményre.

    +MediaStoreHelpStringComponentPallette =

    A MédiaTárhely komponens segítségével egy webszolgáltatáson keresztül média fájlokat tárolhatunk. Egyetlen metódusa van, amellyel a szolgáltatás BLOB tárhelyére tölthetünk fel egy média objektumot, majd visszakapjuk a letárolt fájl URL-jét.

    +NearFieldHelpStringComponentPallette =

    Láthatatlan komponens, amely rövidtávú vezeték nélküli kommunikációra képes.

    Jelenleg csak szöveges üznetek küldésére és fogadására képes (amennyiben a készülék támogatja).

    Az üzenetek olvasásához az OlvasásMód mezőt Igaz értékre, írásához pedig Hamis értékre kell állítani

    Figyelem: a komponens csak az alkalmazás kezdő képernyőjén képes működni.

    +NotifierHelpStringComponentPallette = A felugró üzenet komponensen keresztül figyelmeztető üzeneteket, ideiglenes felugró ablakokat és az Android naplózási lehetőségeit tudjuk használni:
    • SzövegesÜzenetAblak: egy üzenetet jelenít meg, amelyet a felhasználó egy gomb megnyomásával tüntethet el
    • VálasztásAblak: egy üzenetet és két szöveges gombot jelenít meg, a felhasználó két gomb közül az egyik megnyomásával tüntetheti el az ablakot, amelynek hatására a MegtörténtAVálasztás esemény következik be
    • SzövegBevitelAblak: a felhasználó a megjelenő üzenetre egy szöveg bevitelével válaszolhat, amelynek hatására a MegtörténtASzövegBevitel esemény következik be
    • IdeiglenesFigyelmeztetőAblak: egy ideiglenes figyelmeztető üzenetet jelenít meg, amely rövid idő után magától eltűnik
    • FolyamatÁbrázolóAblak: egy üzenetet és egy forgó animációt jelenít meg, jelezve hogy egy befejezetlen folyamat megy a háttérben. Csak a FolyamatÁbrázolóAblakBezárása paranccsal lehet eltüntetni.
    • FolyamatÁbrázolóAblakBezárása: eltünteti azt az ablakot amelyet a FolyamatÁbrázolóAblak parancs hozott elő.
    • HibaÜzenetNaplózása: egy hibaüzenetet ír az Android rendszer szöveges eseménynaplójába.
    • FigyelmeztetőÜzenetNaplózása: egy figyelmeztető üzenetet ír az Android rendszer szöveges eseménynaplójába.
    • InformációÜzenetNaplózása: egy egyszerű szöveges üzenetet ír az Android rendszer szöveges eseménynaplójába.
    • Bármelyik ablakban megjelenő üzenet formázható az alábbi HTML elemekkel:<b>, <big>, <blockquote>, <br>, <cite>, <dfn>, <div>, <em>, <small>, <strong>, <sub>, <sup>, <tt>. <u>
    • Ugyancsak használható a <font> elem a szöveg színének beállítására, pl: <font color=\"blue\">. A szöveg nevét angolul kell megadni. A használható szín nevek: aqua, black, blue, fuchsia, green, grey, lime, maroon, navy, olive, purple, red, silver, teal, white, yellow, stb.
    +NxtColorSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT robot színérzékelő eszközéhez. +NxtDirectCommandsHelpStringComponentPallette = Alacsony szintű hozzáférést biztosít a LEGO MINDSTORM NXT robothoz, közvetlen parancsok küldhetők vele a készülékre. +NxtDriveHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT eszközhöz, a parancsaival mozgathatjuk és forgathatjuk a robotot. +NxtLightSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT robot fényérzékelő eszközéhez. +NxtSoundSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT hangerő mérő eszközéhez. +NxtTouchSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT érintés érzékelő eszközéhez. +NxtUltrasonicSensorHelpStringComponentPallette = Magas szintű hozzáférést biztosít a LEGO MINDSTORMS NXT ultrahang érzékelő eszközéhez. +OrientationSensorHelpStringComponentPallette =

    Láthatatlan komponens, amely a készülék fizikai irányáról ad információkat három dimenzióban:

    • x elfordulás: 0 fok ha a készülék a földön fekszik, 90 fok ha a bal oldalán áll, és -90 fok ha a jobb oldalán.
    • y elfordulás: 0 fok ha a készülék a földön fekszik, 90 fok ha a készülék teteje néz függőlegesen lefele, 180 fok ha a képernyő függőlegesen lefele néz. Hasonlóképp -90 fok ha a készülék alja néz lefelé, -180 fok ha a képernyő függőlegesen lefele néz.
    • z elfordulás: 0 fok ha a észak felé néz, 90 fok ha keletre, 180 fok ha dél irányába, 270 fok ha nyugatra.
    Ezek az értékek akkor lehetnek pontosak, ha a készülék nem mozog.

    +PasswordTextBoxHelpStringComponentPallette =

    Egy szöveges beviteli mező, ahová jelszavakat lehet beírni. Hasonlóan működik mint a Szövegbeviteli mező komponens, de itt nem láthatók a felhasználó által begépelt karakterek.

    A beírt szöveg lekérdezhető vagy beállítható a Szöveg tulajdonságon keresztül. Ha a beviteli mező üres, akkor a Segítő szöveg tartalma jelenik meg, amellyel segítő utalást adhatunk mit is kell oda beírni.

    A szöveges beviteli mezőket sokszor használjuk a Gomb komponenssel együtt, amikor is a felhasználó a szöveg beírása után rákattint egy gombra.

    +PedometerHelpStringComponentPallette = A LépésSzámláló a beépített GyorsulásMérő segítségével számon tartja hány lépést tett meg a készüléket használó személy, illetve hogy az mekkora földrajzi távolságnak felel meg. +PhoneCallHelpStringComponentPallette =

    Egy láthatatlan komponens, amellyel telefon hívásokat kezdeményezhetünk a Telefonszám mezőben megadott számra (pl: "36301234567"), amelyet a Képernyő Szerkesztőben és a Blokk Szerkesztőben is beállíthatunk. A szövegként megadott telefonszám tartalmazhat kötőjel, zárójel és pont karaktereket, de szóközt nem.

    A komponens TelefonHívásIndítása blokkjával indíthatjuk el ténylegesen a hívást.

    Gyakran használjuk a Névjegy választó vezérlővel együtt, amely lehetővé teszi hogy a felhasználó kiválasszon egy lementett névjegyet és a hozzá tartozó telefonszámot.

    +PhoneNumberPickerHelpStringComponentPallette =

    Egy gomb, amelyet ha lenyomunk, megjeleníti a készüléken található elmentett telefonszámok listáját. Miután a felhasználó kiválasztott közülük egyet, az alábbi információk állnak rendelkezésre a Névjegy ki lett választva blokkban:

      \n
    • Névjegy név: a névjegyhez tartozó személy/cég neve
    • \n
    • E-mail cím: a névjegyhez tartozó elsődleges email cím
    • \n
    • Telefonszám: névjegyhez tartozó telefonszám
    • \n
    • Kép: a névjegyhez tartozó kép fájl elérési útja, amely értéket felhasználhatjuk egy Kép vagy egy Szereplő komponens Kép forrása mezőjének beállításánál.
    \n

    Vannak egyéb tulajdonságai, amelyek a gomb kinézetét módosítják (Szöveg víszintes igazítás, Háttérszín, stb.), illetve az hogy a gombra rá lehet-e kattintani (Engedélyezett).

    Nem mindegyik készülék támogatja a telefonszám kiválasztását. Hiba esetén egy felugró üzenetablakban lesz látható a hiba oka, de ezt a viselkedést felülírhatjuk a Képernyő komponens HibaTörtént blokkjában.

    +PhoneStatusHelpStringComponentPallette = A komponens a telefon állapotáról ad vissza információkat. +PlayerHelpStringComponentPallette =

    Egy multimédia komponens, amely zenék és hosszabb hangfájlok lejátszására képes, valamint a telefont rezgetésére (a Blokk Szerkesztőben megadott időtartamra). A hang/zene forrása (fájlnév, URL) a Képernyő Szerkesztőben és a Blokk Szerkesztőben is megadható. A támogatott fájl formátumról itt található információ: Android Supported Media Formats.

    A zene lejátszóval zenéket és hosszabb hangokat érdemes lejátszani, rövidebb hangfájlokhoz használjuk inkább a hang lejátszó komponenst.

    +SharingHelpStringComponentPallette =

    Egy láthatatlan komponens, amely fájlok és üzenetek megosztását teszi lehetővé a te alkalmazásod és a többi készülékre telepített alkalmazás között. Használatkor a komponens megjeleníti azon alkalmazások listáját, amelyek a megosztásra szánt adatot képesek kezelni, a felhasználó pedig kiválaszthat közülük egyet (pl. egy email alkalmazást vagy egy SMS alkalmazást).

    A megosztandó fájl elérési útja lekérdezhető közvetlenül egy KépVálasztó vagy egy Kamera komponenstől, de akár egy már a lászülék tárhelyén lévő fájlt is felhasználhatunk.

    Különböző készülékek különböző módon tárolhatják ugyanazt a fájlt, például ha van egy alma.gif állomány a Appinventor/assets könyvtárban, akkor ennek a teljes elérési útja lehet akár:

    • \"file:///sdcard/Appinventor/assets/alma.gif\"
    • vagy
    • \"/storage/Appinventor/assets/alma.gif\"

    +SliderHelpStringComponentPallette = A Csúszka egy víszintes rúd, amelynek van egy mozgatható része. Ez képviseli a Csúszka értéktartományán belül felvett értéket, a felhasználó pedig jobbra vagy balra mozgathatja az ujjai segítségével. Ha megváltozik a helyzete/értéke, akkor bekövetkezik az CsúszkaÉrtékMegváltozott esemény. Ez felhasználható például arra hogy a változásra reagálva módosítsuk egy másik komponens tulajdonságát (pl: egy SzövegbeviteliMező betűméretét vagy egy Labda komponens átmérőjét). +SoundHelpStringComponentPallette =

    Egy multimédia komponens, amely hangok lejátszására képes, valamint a telefont rezgetésére (a Blokk Szerkesztőben megadott időtartamra). A hangfájl neve a Képernyő Szerkesztőben és a Blokk Szerkesztőben is megadható. A támogatott fájl formátumról itt található információ: Android Supported Media Formats.

    A Hanglejátszóval rövid hangokat érdemes lejátszásani, hoszabb zenékhez használjuk inkább a ZeneLejátszó komponenst.

    +SoundRecorderHelpStringComponentPallette =

    Hangfelvétel készítésére képes a készülék mikrofonjával.

    +SpeechRecognizerHelpStringComponentPallette = Hangfelismerő algoritmus segítségével a rögzített beszédet írott szöveggé alakítja. +SpinnerHelpStringComponentPallette =

    A FelugróLista komponens egy szöveges listát tartalmazó felugró ablak, amelyből a felhasználó kiválaszthat egy elemet. A lista elemei a ListaElemekMintSzöveg tulajdonságon keresztül állíthatók be (vesszővel elválasztva, pl: első elem, második elem, harmadik elem) a Képernyő Szerkesztőben vagy a Blokk Szerkesztőben. Ugyancsak beállíthatjuk, ha a Blokk Szerkesztőben egy lista értéket rendelünk a ListaElemek mezőhöz.

    +TableArrangementHelpStringComponentPallette =

    Egy olyan elrendező elem, amely táblázatos formában (sor-oszlop szerint) jeleníti meg a belé helyezett elemeket.

    +TextBoxHelpStringComponentPallette =

    Egy komponens, amelybe a felhasználó szöveget írhat be. A beírt szöveg lekérdezhető vagy beállítható a Szöveg tulajdonságon keresztül. Ha a beviteli mező üres, akkor a SegítőSzöveg tartalma jelenik meg, amellyel segítő utalást adhatunk mit is kell oda beírni.

    A Többsoros tulajdonsággal állíthatjuk be hogy a szöveg több sorba is átnyúlhat-e. Egysoros bevitel esetén a billentyűzet automatikusan bezárul, ha a felhasználó a Done/Kész gombot lenyomja. Többsoros szövegmezőknél ezt a BillentyűzetElrejtése paranccsal lehet elérni, vagy a Vissza gomb lenyomásával a felhasználó által.

    A CsakSzámok tulajdonsággal beállítható hogy a szövegmezőbe csak szám karaktereket lehessen beírni.

    A többi tulajdonság a szöveg mező megjelenését szabályozza (pl: HáttérSzín), vagy azt hogy lehet-e bele írni (Engedélyezett).

    A szöveges beviteli mezőket sokszor használjuk a Gomb komponenssel együtt, amikor is a felhasználó a szöveg beírása után rákattint egy gombra.

    Ha azt akarod hogy a beírt szöveg ne legyen látható, akkor használd inkább a JelszóBevitel komponenst.

    +TextToSpeechHelpStringComponentPallette = Az írott szöveget hangos beszéddé alakítja és lejátsza. +TextingHelpStringComponentPallette =

    Egy láthatatlan komponens, amely üzenet küldés paranccsal el tudja küldeni az Üzenet mezőben megadott szöveget a TelefonSzám mezőben megadott számra.

    Ha az üzenet fogadási mód mező értéke 1-re (Kikapcsolva) van beállítva, akkor az alkalmazás egyáltalán nem fog üzeneteket fogadni. Ha a üzenet fogadási mód mező értéke 2-re (csak ha előtérben az alkalmazás) van beállítva, akkor az alkalmazás csak akkor fogad SMS üzeneteket ha az előtérben fut. És végül ha az üzenet fogadási mód mező értéke 3-ra (mindig) van beállítva, akkor az alkalmazás az előtérben futva és kikapcsolva is képes üzeneteket fogadni. Az az alkalmazás amely használja ezt a komponenst, akkor is fogad üzeneteket amikor a háttérben van (vagyis nincs az adott pillanatban a készülék képernyőjén), sőt, még akkor is ha nem is fut, csak telepítve van a készüléken. Ha üzenet érkezik a telefonra amikor az alkalmazás nincs az előtérben, akkor az értesítési sávban megjelenik egy értesítés, amelyre tapintva elindul majd az alkalmazás. Fejlesztőként valószínű hogy azt akarod hogy a felhasználó is képes legyen szabályozni az üzenet fogadási mód mező értékét, hogy ne legyen kötelező az alkalmazásnak fogadnia minden üzenetet.

    Amikor üzenet érkezik, az üzenet érkezett esemény kerül meghívásra, amelyben megkapjuk a küldő fél telefonszámát és az üzenet tartalmát.

    Ha a Google asszisztens engedélyezve tulajdonság be van kapcsolva, akkor a Google Asszisztens segítségével akár wifin keresztül is küldhetünk üzenetet. Ez viszont csak akkor működik ha rendelkezünk Google Asszisztens fiókkal és a készülékünkön Android 2.0 (Eclair) vagy frissebb operációs rendszer fut.

    A címzett számát (pl., 361-555-1212) a telefonszám mezőn keresztül állíthatjuk be (pl., 3615551212). Tartalmazhat pont, kötőjel és zárójel karaktereket (de figyelmen kívül lesznek hagyva), viszont szóközt nem.

    A címzett beállításánál felhasználhatjuk a telefonszám választó komponenst, megengedve a felhasználónak hogy a telefonon rögzített kapcsolatok listájából válasszon telefonszámot.

    +TimePickerHelpStringComponentPallette =

    Egy gomb, amely kattintásra egy ablakot jelenít meg, amelyben a felhasználó kiválaszthat egy tetszőleges időpontot.

    +TinyDBHelpStringComponentPallette =

    A TinyDB egy helyi adatbázis az alkalmazás számára.

    Az App Inventorban készített alkalmazások nem mentik el automatikusan a használt változók értékeit. Az alkalmazás bezárásával az összesnek törlődik az értéke. Ezzel szemben a TinyDB perzisztens adattárolást tesz lehetővé, az ide mentett adatok az alkalmazás bezárása után is megmaradnak és elérhetők lesznek a program újboli indítása során. Egy jó példa erre egy játék során elért pontszámok (high score) elmentése.

    Az adatbázisba szöveges elemeket írhatunk, mindegyikhez egy címkét rendelve. Később pedig lekérdezhetjük hogy az adatbázisban az adott címkéhez milyen adat tartozik.

    Egy alkalmazáshoz csak egyetlen TinyDB adatbázis tartozhat, még ha több TinyDB komponenst is használunk a programban, az ugyanarra az adattárra fog hivatkozni. Ha azt a hatást akarjuk elérni hogy több adatbázisunk akkor használjunk különböző címkéket. Mindegyik alkalmazás saját TinyDB adatbázissal rendelkezik, ezért a TinyDB nem használható alkalmazások közötti adatmegosztásra, arra viszont igen hogy egy több képernyős program képernyői között adatot osszon meg.

    Fejlesztés közben az AI Companion alatt futó összes alkalmazás ugyanazt a TinyDB adatbázist használja, de ez csak addig tart amíg különálló alkalmazás nem lesz a fejlesztés alatt álló programból (külön .apk fájlba csomagolva). Addig is érdemes figyelni mikor és mit törlünk a TinyDB adatbázisból.

    +TinyWebDBHelpStringComponentPallette = Láthatatlan komponens, amellyel egy webes adatbázisban tárolhatunk adatokat és olvashatjuk azokat vissza. +TwitterHelpStringComponentPallette =

    Egy láthatatlan komponens, amelynek segítségével a Twitteren küldhetünk üzeneteket. Amint a felhasználó bejelentkezett a Twitter fiókjába (és meghívódott az ennek sikerességét jelző SikeresenBejelentkezett esemény), több parancs is elérhetővé válik:

    • keresés a tweetek között szöveg vagy címke alapján (TwitterKeresés)

    \n
  • Tweet küldése (Tweet)
  • \n
  • Tweet küldése képpel együtt (TweetKéppel)
  • \n
  • Közvetlen üzenet egy felhasználónak (KözvetlenÜzenet)
  • \n
  • A legutóbbi üzenetek olvasása, amit közvetlenül a te Twitter fiókodnak címeztek (KözvetlenÜzenetekLekérdezése)
  • \n
  • Egy felhasználó követése (Követés)
  • \n
  • Egy felhasználó követésének leállítása (KövetésLeállítása)
  • \n
  • Követőid listájának lekérdezése (KövetőkLekérdezése)
  • \n
  • Az általad követett felhasználók legújabb üzeneteinek lekérdezése (BarátokÜzeneteinekLekérdezése)
  • \n
  • A legutóbbi üzenetek lekérdezése amelyekben megemlítették a felhasználódat (EmlítésekLekérdezése)
  • \n

    A komponens használatához szükséged lesz egy Felhasználói Kulcsra (Consumer Key) és egy Titkos Kulcsra (Consumer Secret). Ezeket a kulcsokat az alábbi címen lehet létrehozni és az alkalmazáshoz rendelni: http://twitter.com/oauth_clients/new

    +VerticalArrangementHelpStringComponentPallette =

    Egy olyan elrendező elem, amely a belé rakott komponenseket függőlegesen, egymás alá rendezve jeleníti meg. Ha azt szeretnéd, hogy a komponenseket inkább víszintesen egymás mellé helyezze, akkor a VíszintesElrendezés vezérlőt érdemes használnod.

    +VerticalScrollArrangementHelpStringComponentPallette =

    Egy olyan elrendező elem, amely a belé rakott komponenseket függőlegesen, egymás alá rendezve jeleníti meg. Ha azt szeretnéd, hogy a komponenseket inkább víszintesen egymás mellé helyezze, akkor a VíszintesElrendezés vezérlőt érdemes használnod.

    Ez a komponens görgethető (ha a benne lévő elemek nem férnek mind ki).

    +VideoPlayerHelpStringComponentPallette =

    Egy videók lejátászára képes komponens. Amíg az alkalmazás fut, addig egy téglalap alakú területet foglal el a képernyőről. Ha a felhasználó hozzáér ehhez a lejátszó területéhez, akkor megjelennek a lejátszás/szünet, előretekerés és visszatekerés gombjai a képernyőn. Ugyanezek a funkciók elérhetők a BlokkSzerkesztőben is a Start, Pause, és SeekTo parancsokkal.

    Az alábbi formátumú videók lejátszására képes: Windows Media Video (.wmv), 3GPP (.3gpp) és MPEG-4 (.mp4). A támogatott formátumokról itt található további információ: Android Supported Media Formats

    Az App Inventorban készült alkalmazások maximális mérete 5 MB, ezért ennél nagyobb videó fájlokat sem lehet fordításkor hozzáadni a projekthez. Ha mégis nagy méretű videót szeretnél lejátszani, akkor állítsd a videó forrását egy URL-re.

    +VotingHelpStringComponentPallette =

    A Szavazó komponens segítségével több felhasználó dönthet többségi szavazással egy vagy több kérdésről egy webszolgáltatáson keresztül.

    +WebHelpStringComponentPallette = Egy láthatatlan komponens, amellyel HTTP GET, POST, PUT és DELETE parancsokat adhatunk ki. +WebViewerHelpStringComponentPallette = Weboldalak böngészésére szolgáló komponens. A kezdő weboldal címe a Képernyő Szerkesztőben és Blokk Szerkesztőben is beállítható a KezdőOldalURL tulajdonságon keresztül. Figyelem: komponens nem rendelkezik a hagyományos asztali böngészők összes képességével. +YandexTranslateHelpStringComponentPallette =

    Tetszőleges szöveget fordíthatunk vele egyik nyelvről a másikra. A fordító a Yandex webes szolgáltatását használja, ezért működő internetes kapcsolat szükséges hozzá.

    A nyelvet amelyről fordítunk és a nyelvet amelyre fordítunk kétbetűs kódokkal kell megadni (pl: \"en-hu\" az angolról magyarra fordítás kódja). Ha a fordítandó nyelvet üresen hagyjuk (pl: \"es\" kód esetén spanyolra fordítunk) akkor a fordító megpróbálja a szöveg alapján kitalálni azt.

    A Yandex fordítóról további információkat - többek között az elérhető nyelvek listáját - a http://api.yandex.com/translate/ címen találhatsz.

    Megjegyzés: a fordítás aszinkron módon, a háttérben történik. Amint elkészült, meghívódik a ElkészültAFordítás esemény.

    +FirebaseDBHelpStringComponentPallette = Láthatatlan komponens, amellyel adatokat tárolhatunk egy webes Firebase adatbázisban. Ezen keresztül akár több alkalmazás is meg tud osztani adatokat egymással. Alapértelmezetten az adatok az App Inventor közös Firebase adatbázisában lesznek eltárolva, de a \"FirebaseURL\" mezőn keresztül akár a saját adatbázisodra is beállíthatod. További információt a Firebase.com oldalon találhatsz. +createNoProjectsDialogText = Üdvözöllek az App Inventor 2 oldalán! +createNoProjectsDialogMessage1 = Még nincs egyetlen App Inventor projekted sem. Az App Inventor használatának bemutatásához kattints az \"Útmutató\" gombra az oldal felső részén. Ha pedig új projektet szeretnél létrehozni, akkor kattints a \"Új projekt létrehozása\" gombra az oldal bal felső sarkában. +createNoprojectsDialogMessage2 = Kellemes mobilprogramozást! +createWelcomeDialogText = Üdvözöllek az App Inventorban! +createWelcomeDialogButton = Tovább +doNotShow = Többet ezt ne mutasd meg +showSurveySplashMessage =

    Kérlek töltsd ki ezt a rövid kérdőívet, hogy megismerjük a véleményedet és jobbá tehessük az App Inventort.

    +showSurveySplashButtonNow = Most kitöltöm +showSurveySplashButtonLater = Később töltöm ki +showSurveySplashButtonNever = Soha nem akarom kitölteni +invalidSessionDialogText = A jelenlegi munkamenet ideje lejárt +invalidSessionDialogMessage =

    Figyelem: Ez a munkamenet lejárt.

    Ezt az App Inventor fiókot egy másik helyről is megnyitották. Ugyanannak a fióknak az egyszerre több helyről való használata kárt tehet a projektben.

    Válassz az alábbiak közül:

    • Ennek a munkamenetnek a befejezése.
    • A másik munkamenet befejezése.
    • Folytatás két párhuzamos munkamenettel.

    +invalidSessionDialogButtonEnd = Munkamenet bezárása +invalidSessionDialogButtonCurrent = Legyen ez az aktuális munkamenet +invalidSessionDialogButtonContinue = Folytatás mind a két munkamenettel +bashWarningDialogText = Folytatás két párhuzamos munkamenettel? +bashWarningDialogMessage =

    FIGYELEM: Egy második App Inventor munkamenet is létrejött ehhez a fiókhoz. Használhatod mind a két munkamenetet párhuzamosan, de könnyen lehet hogy emiatt több változás is elveszik majd a projektedben.

    Nem ajánlott egyszerre több munkamenetet használni. De ha mégis így szeretnél dolgozni, akkor mindenképpen érdemes gyakran mentéseket készítened a saját gépedre, hogy legyen az App Inventor szerverétől független másolatod. Ehhez használd a \"Kijelölt projekt (.aia) exportálása a számítógépemre\" menüpontot a Projekt menüből.

    +bashWarningDialogButtonContinue = Folytatás több párhuzamos munkamenettel +bashWarningDialogButtonNo = Ne használj egyszerre töb munkamenetet +finalDialogText = A munkameneted lezárult +accountDisabledMessage = A fiókod zárolva van +finalDialogMessage =

    A munkameneted befejeződött, most már bezárhatod ezt az ablakot

    +corruptionDialogText = Projekt Olvasási Hiba +corruptionDialogMessage =

    Hiba történt a projekt fájl beolvasása közben

    Lezártuk a munkamenetet, hogy ne keletkezzen több kár a projektben. Bezárhatod ezt az ablakot.

    +blocksTruncatedDialogText = Nincs egyetlen blokk sem a képernyőhöz rendelve +blocksTruncatedDialogMessage =

    Úgy tűnik minden blokkot töröltél a %1 képernyőről.

    • Elmentheted az üres képernyőt, és akkor az eltávolított blokkok véglegesen törölve lesznek a projektből.
    • Vagy visszaállíthatod a projekt legutoljára elmentett változatát.

    +blocksTruncatedDialogButtonSave = Üres képernyő mentése. +blocksTruncatedDialogButtonNoSave = Előző verzió visszaállítása +blocksTruncatedDialogButtonHTML = Kérlek várj %1 másodpercet... +InsertRowMethods = Sor beszúrása +GetRowsMethods = Sorok lekérdezése +GetRowsWithConditionsMethods = Sorok lekérdezése feltétellel +SwitchToSimplifiedChinese = 简体中文 +SwitchToTraditionalChinese = 繁体中文 +SwitchToSpanish = Español +SwitchToFrench = Français +SwitchToItalian = Italiano +SwitchToRussian = Pусский +SwitchToKorean = 한국어 +SwitchToSwedish = Svenska +switchToPortugueseBR = Português do Brasil +switchToPortuguese = Português +switchToDutch = Nederlands +ProgressBarFor = Folyamat Sáv +proximitySensorComponentPallette = Közelség érzékelő +ProximitySensorHelpStringComponentPallette = Láthatatlan komponens, amely a tárgyak távolságát méri a készülék képernyőjétől. A legtöbb készülék az abszolút távolságot adja vissza centiméterben, de van amelyik csak azt állapítja meg hogy a tárgy a megadott maximális távolságon (Maximális távolság mező) belül vagy kívül van. Gyakran használják arra hogy megállapítsa a felhasználó a füléhez nyomva tartja-e a telefont. +MaximumRangeProperties = Maximális távolság +KeepRunningWhenOnPauseProperties = Háttérben is működik +ProximityChangedPropertiesProperties = Távolság változott mező +ProximityChangedMethods = Távolság változott +MaximumRangeMethods = Maximális távolság parancs +ItemTextColorProperties = Listaelem szöveg színe +ItemBackgroundColorProperties = Listaelem háttérszíne +FusionTablesStandardErrorMessage = Fusion Tables lekérdezési hiba +FusionTablesDeprecated = FIGYELEM: a Google elavulttá tette a Fusion Tables Szolgáltatást. 2019. december 3-án le fog állni További információ (angolul) +SelectionColorProperties = Kiválasztott elem címe +LaunchPickerMethods = Választó ablak megjelenítése +SetDateToDisplayMethods = Dátum beállítása +SetDateToDisplayFromInstantMethods = Dátum beállítása pillanat érték alapján +IncomingCallAnsweredEvents = Bejövő hívásra válasz +PhoneCallEndedEvents = Telefonhívás véget ért +PhoneCallStartedEvents = Telefonhívás elkezdődött +OnSettingsEvents = Beállítások menü +OtherPlayerStartedEvents = Másik lejátszás is elindult +ProximityChangedEvents = Távolság megváltozott +ThumbEnabledProperties = Engedélyezett +SetTimeToDisplayMethods = Időpont beállítása +SetTimeToDisplayFromInstantMethods = Időpont beállítása pillanat érték alapján +XMLTextDecodeMethods = XML szöveg dekódolása +extraKeyValueWarning = Az Extra kulcs és Extra érték mezők elavultnak számítanak és a jövőben nem lesznek támogatva. Használd helyettük az Extra értékek mezőt a blokk szerkesztőben.\n +MediaStoredEvents = Média fájl el lett mentve +PostMediaMethods = Média tárolása +scaleProportionally = Képarányos méretezés +scaleToFit = Mérethez igazítás +UnauthenticateMethods = Kijelentkezés +useDefault = Alapértelmezett adatbázis szerver használata +DefaultURLProperties = Alapértelmezett URL +warningDialogTitle = Figyelem! +useFrontDeprecated = Az Elülső kamera használata mező el lett távolítva a Kamera komponensből +firebaseExperimentalWarning = A FirebaseAdatbázis kísérleti jelleggel került be az App Inventorba, így előfordulhatnak a jövőben olyan változtatások is, amelyek nem biztosítják a visszafele kompatibilitást. Nincs garancia rá hogy azok a különálló (saját .apk csomaggal rendelkező) alkalmazások, amelyek ezzel a komponenssel beépítve készültek, a jövőben is működni fognak. +readOnlyMode = Csak olvasható módban vagy +sessionDead = Vagy lejárt a munkameneted, vagy miközben dolgoztál az App Inventort frissítették. Újra kell indítanod a munkamenetedet hogy folytathasd a munkádat. Kattints az \"Újratöltés\" gombra. +reloadWindow = Újratöltés +AccountNameProperties = Felhasználó fiók neve +ProjectIDProperties = Projekt azonosító +CloudDBErrorEvents = Felhő adatbázis hiba történt +cloudDBComponentPallette = Felhő adatbázis +CloudDBHelpStringComponentPallette = Láthatatlan komponens, amellyel adatokat tárolhatunk egy internetes adatbázis szerveren (amelyen a Redis adatbázis szoftver fut). Ezzel adatokat oszthatunk meg akár több alkalmazás között is. Alapértelmezés szerint az adatok az MIT szerverén lesznek eltárolva, de akár te is létrehozhatsz egy ilyen adatbázis szervert. Ha saját adatbázist használsz, akkor állítsd be a \"RedisSzerver\" és \"RedisPort\" mezőket a megfelelő értékekre. +RedisServerProperties = Redis szerver +DefaultRedisServerProperties = Alapértelmezett Redis szerver +RedisPortProperties = Redis port +TokenProperties = Token +GetValuesMethods = Értékek lekérdezése +itemToAddParams = hozzáadandó érték +UseSSLProperties = SSL használata +CloudConnectedMethods = Csatlakozott az adatbázishoz +PrimaryColorProperties = Elsődleges szín +PrimaryColorDarkProperties = Elsődleges sötét szín +AccentColorProperties = Másodlagos szín +ThemeProperties = Téma +classicTheme = Klasszikus +defaultTheme = Alapértelmezett téma +blackTitleTheme = Sötét szöveg +darkTheme = Sötét +MapHelpStringComponentPallette =

    Egy kétdimenziós panel, amely egy térkép lapjait jeleníti meg és Jelölő elemeket helyezhetünk rá az egyes helyek azonosítására. A térkép lapjait és adatait az OpenStreetMap biztosítja.

    A Képernyő Szerkesztőben három gomb látható egymás alatt a képernyőre helyezett térképen, amelyek segítségével annak a földrajzi határait állíthatjuk be.

    • Az elsőn egy lakat látható: ha zárva van, és a térképet egérrel elhúzzuk, akkor a komponens helyzetét változtatjuk meg a többi képernyőn lévő vezérlőhöz képest. Ha nyitva van, akkor egérrel húzva a térkép földrajzi határait változtatjuk meg.
    • A második gombbal a térkép aktuális helyzetét (szélességi és hosszúsági fokait) menti el alapértelmezett pozíciónak (az alkalmazás betöltésekor ez a hely jelenik majd meg).
    • A harmadik gombbal az alapértelmezett helyzetet állíthatjuk vissza, ha elgörgettünk onnan (például azért hogy Jelölő elemeket helyezzünk el máshova).

    +CenterFromStringProperties = Térkép középpontja +BoundingBoxProperties = Befoglaló téglalap +MapTypeProperties = Térkép típusa +ScaleUnitsProperties = Méretegységek +ShowCompassProperties = Iránytűt mutat +ShowScaleProperties = Méretet mutat +ShowUserProperties = Felhasználó pozícióját mutatja +ShowZoomProperties = Nagyítást mutat +EnableRotationProperties = Forgatható +ZoomLevelProperties = Nagyítási szint +BoundsChangeEvents = Térkép koordinátái megváltoztak +ReadyEvents = Térkép betöltődött +ZoomChangeEvents = Nagyítás megváltozott +InvalidPointEvents = Hibás koordináta lett megadva +PanToMethods = Ugrás koordinátára +mapTypeRoads = Térkép +mapTypeAerial = Műhold +mapTypeTerrain = Domborzat +mapScaleUnitsMetric = Metrikus +mapScaleUnitsImperial = Angolszász +ImageAssetProperties = Kép +DescriptionProperties = Leírás +DraggableProperties = Mozgatható +StartDragEvents = Mozgatás elkezdődött +DragEvents = Mozgatják +StopDragEvents = Mozgatás befejeződött +unknownMapTypeException = Ismeretlen térkép típus: {0} +mapCenterWrongNumberArgumentsException = A térképK középpontja szövegként mezőhöz két számot vártam, ehelyett {0} értéket kaptam +mapZoomLevelOutOfBoundsException = A nagyítási szint csak 1 és 18 közötti szám lehet +mapZoomIn = Nagyítás +mapZoomOut = Kicsinyítés +mapLockMovementTooltip = Térkép mozgatás zárolása +mapUnlockMovementTooltip = Térkép mozgatás engedélyezése +mapSetInitialMapTooltip = Kezdeti pozíció beállítása erre a helyre +mapResetBoundingBoxTooltip = Befoglaló téglalap visszaállítása +CreateMarkerMethods = Jelölő elem létrehozása +SetLocationMethods = Koordináták beállítása +FillColorProperties = Kitöltési szín +StrokeColorProperties = Körvonal szín +StrokeWidthProperties = Vonalvastagság +TypeProperties = Típus +LoadErrorEvents = Térkép betöltési hiba +GotFeaturesEvents = Térkép objektumok betöltődtek +TapAtPointEvents = Megérintették a térkép egy pontját +FeatureFromDescriptionMethods = Térkép objektum létrehozása szöveges leírásból +EnableInfoboxProperties = Van felugró információs ablak +EnableZoomProperties = Nagyítható +HideInfoboxMethods = Információs ablak elrejtése +ShowInfoboxMethods = Információs ablak megjelenítése +fromUrlButton = Betöltés URL-ről... +urlImportWizardCaption = Erőforrás betöltése URL-ről... +AnchorHorizontalProperties = Horgonypont vízszintes elrendezése +AnchorVerticalProperties = Horgonypont függőleges elrendezése +FeaturesProperties = Térkép objektumok +FeaturesFromGeoJSONProperties = Térkép objektumok GeoJSON formátumban +PointsProperties = Alakzat pontjai +EnablePanProperties = Görgethető +DistanceToFeatureMethods = Másik térkép objektumtól való távolság +DistanceToPointMethods = Ponttól való távolság +BearingToFeatureMethods = Iránya egy másik objektumhoz viszonyítva +BearingToPointMethods = Iránya egy ponthoz viszonyítva +HolePointsProperties = Lyukpontok +CentroidMethods = Középpont kiszámítása +PointsFromStringProperties = Síkidom pontjai +HolePointsFromStringProperties = Lyukpontok +DoubleTapAtPointEvents = Duplán tapintottak egy pontot +FeatureClickEvents = Térképobjektumra kattintottak +FeatureDragEvents = Elhúztak egy térkép objektumot +FeatureLongClickEvents = Hosszan kattintottak egy térkép objektumra +FeatureStartDragEvents = Elkezdték mozgatni az egyik térkép objektumot +FeatureStopDragEvents = Befejezték a térkép objektum mozgatását +LongPressAtPointEvents = Hosszan érintettek egy pontot +circleComponentPallette = Kör +CircleHelpStringComponentPallette =

    Egy kört lehet vele rajzolni a térkép megadott pontjára. A kör sugarát méterben kell megadni.

    A kör közepén lévő négyzet húzásával tudjuk annak helyzetét megváltoztatni a térképen, a szélén lévő négyzettel pedig a kör sugarát állíthatjuk be.

    +mapFeatureParams = térkép objektum +centroidsParams = középpontok használata távolság számításnál +centroidParams = középpontok használata távolság számításnál +featureCollectionComponentPallette = Térkép objektum gyűjtemény +FeatureCollectionHelpStringComponentPallette =

    Egy vagy több térkép objektumot (kört, poligont, stb.) tartalmazó gyűjtemény. Tartalmát GeoJSON formátumban kell megadni, ami lehet helyi erőforrás, vagy betölthető egy URL-en keresztül is.

    +lineStringComponentPallette = Vonal +LineStringHelpStringComponentPallette =

    Vonalak láncolata a térképen.

    A vonalak végére kattintva húzhatjuk azt szét vagy össze, így állítva be a helyét és hosszát. A vonal közepére kattintva oszthatjuk azt ketté (ezután a két részt külön vonalként kezelhetjük).

    +mapComponentPallette = Térkép +featureParams = térkép objektum +featuresParams = térkép objektumok +descriptionParams = szöveges leírás +zoomParams = nagyítás +markerComponentPallette = Jelölő +MarkerHelpStringComponentPallette =

    Egy ikon, amelyet egy térképen található hely azonosítására használhatunk. Beállíthatjuk a hozzá tartozó képet, a színét és a helyszín leírását is.

    +polygonComponentPallette = Poligon +PolygonHelpStringComponentPallette =

    Egy sokszöget rajzolhatunk vele a térkép felületére.

    A sokszög csúcsaira kattintva húzhatjuk azokat szét vagy össze, így állítva be a helyüket és hosszukat. Az oldalak közepére kattintva oszthatjuk azokat ketté (ezután a két részt külön vonalként kezelhetjük).

    +errorMessageParams = hibaüzenet +rectangleComponentPallette = Téglalap +RectangleHelpStringComponentPallette =

    Egy téglalapot rajzol a térképre északi, déli, keleti és nyugati oldalakkal.

    A téglalap méretét és helyét a sarkainak szét- vagy összehúzásával változtathatjuk meg.

    +EastLongitudeProperties = Keleti oldal hosszúsági foka +NorthLatitudeProperties = Északi oldal szélességi foka +SouthLatitudeProperties = Déli oldal szélességi foka +WestLongitudeProperties = Nyugati oldal hosszúsági foka +LoadFromURLMethods = Térkép elemek betöltése URL címről +customEllipsis = Egyéni... +ActionBarProperties = Akciósáv +valueNotInRange = A megadott {0} érték nem a megengedett [{1}, {2}] tartományban van. +expectedLatLongPair = Hibás szélességi-hosszúsági fokokat adtál meg {0} értékének. +LocationSensorProperties = Helyzetérzékelő +UserLatitudeProperties = Felhasználó szélességi foka +UserLongitudeProperties = Felhasználó hosszúsági foka +BoundsMethods = Befoglaló téglalap kiszámítása +CenterMethods = Középpont kiszámítása +SetCenterMethods = Középpont beállítása +RotationProperties = Forgatás +GetVersionNameMethods = +SdkLevelMethods = SDK verzió +GetInstallerMethods = Telepítő +NoticeTitle = Figyelem! +PackageNotice = Használd ezt az opciót ha olyan alkalmazást szeretnél készíteni amely Andoird 2.1-en (Eclair) is működik. Ebben az esetben nem tudod majd az alkalmazást a Play Store-ba publikálni. Package26Notice = Használd ezt az opciót ha olyan alkalmazást szeretnél készíteni amely felrakható a Play Store-ba. Az elkészült alkalmazás futtatásához legalább Android 4.0-ás készülék szükséges. \ No newline at end of file diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_hy.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_hy.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_hy.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_hy.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_it_IT.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_it_IT.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_it_IT.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_it_IT.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_ko_KR.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_ko_KR.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_ko_KR.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_ko_KR.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_lt.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_lt.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_lt.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_lt.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_nl.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_nl.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_nl.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_nl.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_pl.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_pl.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_pl.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_pl.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_pt.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_pt.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_pt.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_pt.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_pt_BR.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_pt_BR.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_pt_BR.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_pt_BR.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_ru.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_ru.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_ru.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_ru.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_sv.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_sv.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_sv.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_sv.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_tr.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_tr.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_tr.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_tr.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_zh_CN.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_zh_CN.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_zh_CN.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_zh_CN.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/OdeMessages_zh_TW.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_zh_TW.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/OdeMessages_zh_TW.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/OdeMessages_zh_TW.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/ProjectEditorRegistry.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/ProjectEditorRegistry.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/ProjectEditorRegistry.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/ProjectEditorRegistry.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/Registry.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/Registry.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/Registry.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/Registry.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/RpcListener.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/RpcListener.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/RpcListener.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/RpcListener.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/RpcListenerAdapter.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/RpcListenerAdapter.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/RpcListenerAdapter.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/RpcListenerAdapter.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/RpcStatusPopup.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/RpcStatusPopup.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/RpcStatusPopup.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/RpcStatusPopup.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/StatusPanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/StatusPanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/StatusPanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/StatusPanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/SysOutLogger.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/SysOutLogger.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/SysOutLogger.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/SysOutLogger.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/TopPanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/TopPanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/TopPanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/TopPanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/TopToolbar.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/TopToolbar.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/TopToolbar.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/TopToolbar.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/admin/AdminComparators.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/admin/AdminComparators.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/admin/AdminComparators.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/admin/AdminComparators.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/AdminUserListBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/AdminUserListBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/AdminUserListBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/AdminUserListBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/AssetListBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/AssetListBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/AssetListBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/AssetListBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/BlockSelectorBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/BlockSelectorBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/BlockSelectorBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/BlockSelectorBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/MessagesOutputBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/MessagesOutputBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/MessagesOutputBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/MessagesOutputBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/MotdBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/MotdBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/MotdBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/MotdBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/OdeLogBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/OdeLogBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/OdeLogBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/OdeLogBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/PaletteBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/PaletteBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/PaletteBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/PaletteBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/ProjectListBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/ProjectListBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/ProjectListBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/ProjectListBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/PropertiesBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/PropertiesBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/PropertiesBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/PropertiesBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/SourceStructureBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/SourceStructureBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/SourceStructureBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/SourceStructureBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/ViewerBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/ViewerBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/ViewerBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/ViewerBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/boxes/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/boxes/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/boxes/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/EditorManager.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/EditorManager.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/EditorManager.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/EditorManager.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/FileEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/FileEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/FileEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/FileEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/ProjectEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/ProjectEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/ProjectEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/ProjectEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/ProjectEditorFactory.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/ProjectEditorFactory.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/ProjectEditorFactory.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/ProjectEditorFactory.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/ComponentDatabase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/ComponentDatabase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/ComponentDatabase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/ComponentDatabase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/ComponentNotFoundException.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/ComponentNotFoundException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/ComponentNotFoundException.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/ComponentNotFoundException.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/SimpleComponentDatabase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/SimpleComponentDatabase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/SimpleComponentDatabase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/SimpleComponentDatabase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/SimpleEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/SimpleEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/SimpleEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/SimpleEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/SimpleNonVisibleComponentsPanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/SimpleNonVisibleComponentsPanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/SimpleNonVisibleComponentsPanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/SimpleNonVisibleComponentsPanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/SimpleVisibleComponentsPanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/SimpleVisibleComponentsPanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/SimpleVisibleComponentsPanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/SimpleVisibleComponentsPanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/DataFileChangeListener.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/DataFileChangeListener.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/DataFileChangeListener.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/DataFileChangeListener.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/DesignPreviewChangeListener.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/DesignPreviewChangeListener.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/DesignPreviewChangeListener.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/DesignPreviewChangeListener.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/FormChangeListener.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/FormChangeListener.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/FormChangeListener.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/FormChangeListener.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/LayoutInfo.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/LayoutInfo.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/LayoutInfo.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/LayoutInfo.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockAreaChartDataModel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockAreaChartDataModel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockAreaChartDataModel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockAreaChartDataModel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockAreaChartView.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockAreaChartView.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockAreaChartView.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockAreaChartView.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockAxisChartView.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockAxisChartView.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockAxisChartView.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockAxisChartView.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockBall.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockBall.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockBall.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockBall.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockBarChartDataModel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockBarChartDataModel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockBarChartDataModel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockBarChartDataModel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockBarChartView.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockBarChartView.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockBarChartView.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockBarChartView.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockButton.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockButton.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockButton.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockButton.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockButtonBase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockButtonBase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockButtonBase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockButtonBase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockCanvas.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockCanvas.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockCanvas.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockCanvas.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockCanvasLayout.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockCanvasLayout.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockCanvasLayout.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockCanvasLayout.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChart.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChart.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChart.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChart.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChartData.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChartData.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChartData.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChartData.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChartData2D.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChartData2D.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChartData2D.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChartData2D.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChartDataModel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChartDataModel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChartDataModel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChartDataModel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChartLayout.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChartLayout.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChartLayout.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChartLayout.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChartView.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChartView.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockChartView.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockChartView.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockCheckBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockCheckBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockCheckBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockCheckBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockCircle.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockCircle.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockCircle.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockCircle.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockCloudDB.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockCloudDB.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockCloudDB.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockCloudDB.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockComponent.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockComponent.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockComponent.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockComponent.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockComponentsUtil.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockComponentsUtil.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockComponentsUtil.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockComponentsUtil.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockContactPicker.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockContactPicker.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockContactPicker.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockContactPicker.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockContainer.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockContainer.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockContainer.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockContainer.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockDataFile.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockDataFile.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockDataFile.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockDataFile.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockDatePicker.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockDatePicker.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockDatePicker.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockDatePicker.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockEmailPicker.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockEmailPicker.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockEmailPicker.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockEmailPicker.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFeatureCollection.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFeatureCollection.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFeatureCollection.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFeatureCollection.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFeatureCollectionLayout.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFeatureCollectionLayout.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFeatureCollectionLayout.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFeatureCollectionLayout.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFirebaseDB.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFirebaseDB.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFirebaseDB.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFirebaseDB.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockForm.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockForm.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockForm.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockForm.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFormHelper.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFormHelper.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFormHelper.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFormHelper.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFormLayout.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFormLayout.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFormLayout.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFormLayout.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFusionTablesControl.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFusionTablesControl.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockFusionTablesControl.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockFusionTablesControl.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockHVArrangement.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockHVArrangement.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockHVArrangement.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockHVArrangement.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockHVArrangementHelper.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockHVArrangementHelper.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockHVArrangementHelper.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockHVArrangementHelper.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockHVLayout.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockHVLayout.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockHVLayout.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockHVLayout.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockHVLayoutBase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockHVLayoutBase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockHVLayoutBase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockHVLayoutBase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockHorizontalArrangement.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockHorizontalArrangement.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockHorizontalArrangement.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockHorizontalArrangement.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockImage.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockImage.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockImage.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockImage.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockImageBase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockImageBase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockImageBase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockImageBase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockImagePicker.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockImagePicker.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockImagePicker.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockImagePicker.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockImageSprite.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockImageSprite.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockImageSprite.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockImageSprite.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLabel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLabel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLabel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLabel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLayout.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLayout.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLayout.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLayout.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLineChartBaseDataModel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLineChartBaseDataModel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLineChartBaseDataModel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLineChartBaseDataModel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLineChartDataModel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLineChartDataModel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLineChartDataModel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLineChartDataModel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLineChartView.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLineChartView.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLineChartView.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLineChartView.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLineChartViewBase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLineChartViewBase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLineChartViewBase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLineChartViewBase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLineString.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLineString.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockLineString.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockLineString.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockListPicker.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockListPicker.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockListPicker.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockListPicker.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockListView.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockListView.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockListView.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockListView.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMap.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMap.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMap.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMap.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMapFeature.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMapFeature.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMapFeature.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMapFeature.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMapFeatureBase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMapFeatureBase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMapFeatureBase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMapFeatureBase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMapFeatureBaseWithFill.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMapFeatureBaseWithFill.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMapFeatureBaseWithFill.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMapFeatureBaseWithFill.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMapLayout.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMapLayout.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMapLayout.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMapLayout.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMarker.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMarker.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockMarker.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockMarker.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockNonVisibleComponent.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockNonVisibleComponent.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockNonVisibleComponent.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockNonVisibleComponent.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPasswordTextBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPasswordTextBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPasswordTextBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPasswordTextBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPhoneNumberPicker.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPhoneNumberPicker.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPhoneNumberPicker.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPhoneNumberPicker.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPieChartDataModel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPieChartDataModel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPieChartDataModel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPieChartDataModel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPieChartView.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPieChartView.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPieChartView.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPieChartView.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPointChartDataModel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPointChartDataModel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPointChartDataModel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPointChartDataModel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPointChartView.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPointChartView.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPointChartView.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPointChartView.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPolygon.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPolygon.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPolygon.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPolygon.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPolygonBase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPolygonBase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockPolygonBase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockPolygonBase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockRadioButton.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockRadioButton.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockRadioButton.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockRadioButton.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockRectangle.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockRectangle.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockRectangle.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockRectangle.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockScatterChartDataModel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockScatterChartDataModel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockScatterChartDataModel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockScatterChartDataModel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockScatterChartView.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockScatterChartView.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockScatterChartView.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockScatterChartView.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockScrollHorizontalArrangement.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockScrollHorizontalArrangement.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockScrollHorizontalArrangement.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockScrollHorizontalArrangement.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockScrollVerticalArrangement.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockScrollVerticalArrangement.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockScrollVerticalArrangement.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockScrollVerticalArrangement.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockSlider.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockSlider.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockSlider.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockSlider.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockSpinner.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockSpinner.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockSpinner.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockSpinner.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockSpreadsheet.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockSpreadsheet.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockSpreadsheet.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockSpreadsheet.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockSprite.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockSprite.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockSprite.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockSprite.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockSwitch.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockSwitch.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockSwitch.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockSwitch.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTableArrangement.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTableArrangement.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTableArrangement.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTableArrangement.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTableLayout.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTableLayout.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTableLayout.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTableLayout.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTextBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTextBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTextBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTextBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTextBoxBase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTextBoxBase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTextBoxBase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTextBoxBase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTimePicker.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTimePicker.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTimePicker.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTimePicker.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockToggleBase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockToggleBase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockToggleBase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockToggleBase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTranslator.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTranslator.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockTranslator.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockTranslator.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockVerticalArrangement.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockVerticalArrangement.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockVerticalArrangement.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockVerticalArrangement.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockVideoPlayer.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockVideoPlayer.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockVideoPlayer.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockVideoPlayer.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockVisibleComponent.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockVisibleComponent.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockVisibleComponent.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockVisibleComponent.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockWebViewer.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockWebViewer.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockWebViewer.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockWebViewer.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockWrapper.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockWrapper.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockWrapper.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/MockWrapper.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/utils/PropertiesUtil.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/utils/PropertiesUtil.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/utils/PropertiesUtil.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/utils/PropertiesUtil.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/utils/SVGPanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/utils/SVGPanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/utils/SVGPanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/components/utils/SVGPanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/AbstractPaletteItemWidget.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/AbstractPaletteItemWidget.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/AbstractPaletteItemWidget.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/AbstractPaletteItemWidget.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/ComponentHelpWidget.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/ComponentHelpWidget.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/ComponentHelpWidget.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/ComponentHelpWidget.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/ComponentRemoveWidget.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/ComponentRemoveWidget.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/ComponentRemoveWidget.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/ComponentRemoveWidget.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/DropTargetProvider.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/DropTargetProvider.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/DropTargetProvider.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/DropTargetProvider.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/SimpleComponentDescriptor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/SimpleComponentDescriptor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/SimpleComponentDescriptor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/SimpleComponentDescriptor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/SimplePaletteItem.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/SimplePaletteItem.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/SimplePaletteItem.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/SimplePaletteItem.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/SimplePalettePanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/SimplePalettePanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/SimplePalettePanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/SimplePalettePanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/simple/palette/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/simple/palette/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/BlockDrawerSelectionListener.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/BlockDrawerSelectionListener.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/BlockDrawerSelectionListener.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/BlockDrawerSelectionListener.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/BlocklyPanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/BlocklyPanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/BlocklyPanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/BlocklyPanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/LoadBlocksException.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/LoadBlocksException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/LoadBlocksException.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/LoadBlocksException.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/TutorialPanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/TutorialPanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/TutorialPanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/TutorialPanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/YaBlocksEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/YaBlocksEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/YaBlocksEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/YaBlocksEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/YaFormEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/YaFormEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/YaFormEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/YaFormEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/YaProjectEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/YaProjectEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/YaProjectEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/YaProjectEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/YailGenerationException.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/YailGenerationException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/YailGenerationException.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/YailGenerationException.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/events/EventHelper.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/events/EventHelper.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/events/EventHelper.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/events/EventHelper.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/i18n/BlocklyMsg.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/i18n/BlocklyMsg.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/i18n/BlocklyMsg.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/i18n/BlocklyMsg.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/i18n/BlocklyTranslationGenerator.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/i18n/BlocklyTranslationGenerator.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/i18n/BlocklyTranslationGenerator.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/i18n/BlocklyTranslationGenerator.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/palette/LegoPaletteHelper.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/palette/LegoPaletteHelper.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/palette/LegoPaletteHelper.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/palette/LegoPaletteHelper.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/palette/OrderedPaletteHelper.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/palette/OrderedPaletteHelper.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/palette/OrderedPaletteHelper.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/palette/OrderedPaletteHelper.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/palette/PaletteHelper.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/palette/PaletteHelper.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/palette/PaletteHelper.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/palette/PaletteHelper.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/palette/YoungAndroidPalettePanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/palette/YoungAndroidPalettePanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/palette/YoungAndroidPalettePanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/palette/YoungAndroidPalettePanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/palette/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/palette/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/palette/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/palette/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/ListWithNone.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/ListWithNone.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/ListWithNone.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/ListWithNone.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAccelerometerSensitivityChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAccelerometerSensitivityChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAccelerometerSensitivityChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAccelerometerSensitivityChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAlignmentChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAlignmentChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAlignmentChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAlignmentChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAssetSelectorPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAssetSelectorPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAssetSelectorPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidAssetSelectorPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidBooleanPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidBooleanPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidBooleanPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidBooleanPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidButtonShapeChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidButtonShapeChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidButtonShapeChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidButtonShapeChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartLineTypeChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartLineTypeChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartLineTypeChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartLineTypeChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartPointShapeChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartPointShapeChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartPointShapeChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartPointShapeChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartTypeChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartTypeChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartTypeChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidChartTypeChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidColorChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidColorChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidColorChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidColorChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidComponentSelectorPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidComponentSelectorPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidComponentSelectorPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidComponentSelectorPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidDataColumnSelectorProperty.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidDataColumnSelectorProperty.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidDataColumnSelectorProperty.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidDataColumnSelectorProperty.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidDefaultURLPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidDefaultURLPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidDefaultURLPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidDefaultURLPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFileScopePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFileScopePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFileScopePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFileScopePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFloatRangePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFloatRangePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFloatRangePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFloatRangePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFontTypefaceChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFontTypefaceChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFontTypefaceChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidFontTypefaceChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidGeoJSONPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidGeoJSONPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidGeoJSONPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidGeoJSONPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidGeographicPointPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidGeographicPointPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidGeographicPointPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidGeographicPointPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidHorizontalAlignmentChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidHorizontalAlignmentChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidHorizontalAlignmentChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidHorizontalAlignmentChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidIntegerRangePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidIntegerRangePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidIntegerRangePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidIntegerRangePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3ColorSensorModeChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3ColorSensorModeChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3ColorSensorModeChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3ColorSensorModeChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3GyroSensorModeChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3GyroSensorModeChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3GyroSensorModeChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3GyroSensorModeChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3SensorPortChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3SensorPortChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3SensorPortChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3SensorPortChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3UltrasonicSensorModeChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3UltrasonicSensorModeChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3UltrasonicSensorModeChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoEv3UltrasonicSensorModeChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoNxtSensorPortChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoNxtSensorPortChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoNxtSensorPortChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLegoNxtSensorPortChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLengthPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLengthPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLengthPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidLengthPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidListViewAddDataPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidListViewAddDataPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidListViewAddDataPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidListViewAddDataPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidListViewLayoutChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidListViewLayoutChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidListViewLayoutChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidListViewLayoutChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidMapScaleUnitsPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidMapScaleUnitsPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidMapScaleUnitsPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidMapScaleUnitsPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidMapTypePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidMapTypePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidMapTypePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidMapTypePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidNavigationMethodChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidNavigationMethodChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidNavigationMethodChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidNavigationMethodChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidRecyclerViewOrientationPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidRecyclerViewOrientationPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidRecyclerViewOrientationPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidRecyclerViewOrientationPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidScreenAnimationChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidScreenAnimationChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidScreenAnimationChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidScreenAnimationChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidScreenOrientationChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidScreenOrientationChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidScreenOrientationChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidScreenOrientationChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSensorDistIntervalChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSensorDistIntervalChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSensorDistIntervalChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSensorDistIntervalChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSensorTimeIntervalChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSensorTimeIntervalChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSensorTimeIntervalChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSensorTimeIntervalChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSizingChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSizingChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSizingChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidSizingChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidTextReceivingPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidTextReceivingPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidTextReceivingPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidTextReceivingPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidThemeChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidThemeChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidThemeChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidThemeChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidToastLengthChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidToastLengthChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidToastLengthChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidToastLengthChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidVerticalAlignmentChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidVerticalAlignmentChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidVerticalAlignmentChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/YoungAndroidVerticalAlignmentChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/editor/youngandroid/properties/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/editor/youngandroid/properties/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/SourceStructureExplorer.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/SourceStructureExplorer.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/SourceStructureExplorer.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/SourceStructureExplorer.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/SourceStructureExplorerItem.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/SourceStructureExplorerItem.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/SourceStructureExplorerItem.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/SourceStructureExplorerItem.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/AddFormCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/AddFormCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/AddFormCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/AddFormCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/BuildCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/BuildCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/BuildCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/BuildCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/ChainableCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/ChainableCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/ChainableCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/ChainableCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/CommandRegistry.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/CommandRegistry.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/CommandRegistry.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/CommandRegistry.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/CopyYoungAndroidProjectCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/CopyYoungAndroidProjectCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/CopyYoungAndroidProjectCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/CopyYoungAndroidProjectCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/DeleteFileCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/DeleteFileCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/DeleteFileCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/DeleteFileCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/DownloadFileCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/DownloadFileCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/DownloadFileCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/DownloadFileCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/DownloadProjectOutputCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/DownloadProjectOutputCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/DownloadProjectOutputCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/DownloadProjectOutputCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/EnsurePhoneConnectedCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/EnsurePhoneConnectedCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/EnsurePhoneConnectedCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/EnsurePhoneConnectedCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/GenerateYailCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/GenerateYailCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/GenerateYailCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/GenerateYailCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/MiniProgressBar.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/MiniProgressBar.java old mode 100755 new mode 100644 similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/MiniProgressBar.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/MiniProgressBar.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/PreviewFileCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/PreviewFileCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/PreviewFileCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/PreviewFileCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/ProjectNodeCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/ProjectNodeCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/ProjectNodeCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/ProjectNodeCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/SaveAllEditorsCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/SaveAllEditorsCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/SaveAllEditorsCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/SaveAllEditorsCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/SaveScreenCheckpointCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/SaveScreenCheckpointCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/SaveScreenCheckpointCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/SaveScreenCheckpointCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/ShowBarcodeCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/ShowBarcodeCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/ShowBarcodeCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/ShowBarcodeCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/ShowProgressBarCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/ShowProgressBarCommand.java old mode 100755 new mode 100644 similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/ShowProgressBarCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/ShowProgressBarCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/WaitForBuildResultCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/WaitForBuildResultCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/WaitForBuildResultCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/WaitForBuildResultCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/WarningDialogCommand.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/WarningDialogCommand.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/WarningDialogCommand.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/WarningDialogCommand.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/commands/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/commands/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/commands/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBox.ui.xml b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBox.ui.xml similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBox.ui.xml rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBox.ui.xml diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_ca.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_ca.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_ca.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_ca.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_en.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_en.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_en.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_en.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_hy.properties b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_hy.properties similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_hy.properties rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/NoProjectDialogBoxNoProjectDialogBoxUiBinderImplGenMessages_hy.properties diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/ProgressBarDialogBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/ProgressBarDialogBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/dialogs/ProgressBarDialogBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/dialogs/ProgressBarDialogBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/project/ComponentDatabaseChangeListener.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ComponentDatabaseChangeListener.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/project/ComponentDatabaseChangeListener.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ComponentDatabaseChangeListener.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/project/Project.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/Project.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/project/Project.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/Project.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectChangeAdapter.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectChangeAdapter.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectChangeAdapter.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectChangeAdapter.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectChangeListener.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectChangeListener.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectChangeListener.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectChangeListener.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectComparators.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectComparators.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectComparators.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectComparators.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectManager.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectManager.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectManager.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectManager.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectManagerEventAdapter.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectManagerEventAdapter.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectManagerEventAdapter.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectManagerEventAdapter.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectManagerEventListener.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectManagerEventListener.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectManagerEventListener.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectManagerEventListener.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectNodeContextMenu.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectNodeContextMenu.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/project/ProjectNodeContextMenu.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/ProjectNodeContextMenu.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/project/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/project/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/project/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/AssetList.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/AssetList.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/AssetList.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/AssetList.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/GalleryImages.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/GalleryImages.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/GalleryImages.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/GalleryImages.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/ProjectList.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/ProjectList.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/ProjectList.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/ProjectList.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/ProjectToolbar.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/ProjectToolbar.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/ProjectToolbar.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/ProjectToolbar.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/androidIcon.png b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/androidIcon.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/androidIcon.png rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/androidIcon.png diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/genericApp.png b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/genericApp.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/genericApp.png rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/genericApp.png diff --git a/appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/explorer/youngandroid/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/explorer/youngandroid/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/languages.json b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/languages.json similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/languages.json rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/languages.json diff --git a/appinventor/appengine/src/com/google/appinventor/client/output/MessagesOutput.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/output/MessagesOutput.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/output/MessagesOutput.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/output/MessagesOutput.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/output/MotdUi.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/output/MotdUi.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/output/MotdUi.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/output/MotdUi.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/output/OdeLog.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/output/OdeLog.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/output/OdeLog.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/output/OdeLog.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/package-info.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/package-info.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/package-info.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/package-info.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/properties/BadPropertyEditorException.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/BadPropertyEditorException.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/properties/BadPropertyEditorException.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/BadPropertyEditorException.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/properties/Properties.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/Properties.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/properties/Properties.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/Properties.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/properties/Property.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/Property.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/properties/Property.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/Property.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonArray.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonArray.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonArray.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonArray.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonBoolean.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonBoolean.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonBoolean.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonBoolean.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonNumber.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonNumber.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonNumber.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonNumber.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonObject.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonObject.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonObject.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonObject.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonParser.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonParser.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonParser.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonParser.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonString.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonString.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonString.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonString.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonValue.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonValue.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/properties/json/ClientJsonValue.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/properties/json/ClientJsonValue.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/settings/CommonSettings.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/CommonSettings.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/settings/CommonSettings.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/CommonSettings.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/settings/Settings.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/Settings.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/settings/Settings.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/Settings.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/settings/SettingsAccessProvider.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/SettingsAccessProvider.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/settings/SettingsAccessProvider.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/SettingsAccessProvider.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/settings/project/ProjectSettings.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/project/ProjectSettings.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/settings/project/ProjectSettings.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/project/ProjectSettings.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/settings/project/YoungAndroidSettings.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/project/YoungAndroidSettings.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/settings/project/YoungAndroidSettings.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/project/YoungAndroidSettings.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/settings/user/BlocksSettings.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/user/BlocksSettings.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/settings/user/BlocksSettings.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/user/BlocksSettings.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/settings/user/GeneralSettings.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/user/GeneralSettings.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/settings/user/GeneralSettings.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/user/GeneralSettings.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/settings/user/SplashSettings.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/user/SplashSettings.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/settings/user/SplashSettings.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/user/SplashSettings.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/settings/user/UserSettings.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/user/UserSettings.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/settings/user/UserSettings.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/user/UserSettings.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/settings/user/YoungAndroidSettings.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/user/YoungAndroidSettings.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/settings/user/YoungAndroidSettings.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/settings/user/YoungAndroidSettings.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/tracking/Tracking.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/tracking/Tracking.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/tracking/Tracking.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/tracking/Tracking.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/utils/Downloader.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/Downloader.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/utils/Downloader.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/Downloader.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/utils/FocusImplSafari.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/FocusImplSafari.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/utils/FocusImplSafari.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/FocusImplSafari.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/utils/FocusImplStandard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/FocusImplStandard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/utils/FocusImplStandard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/FocusImplStandard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/utils/HTML5DragDrop.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/HTML5DragDrop.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/utils/HTML5DragDrop.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/HTML5DragDrop.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/utils/MessageDialog.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/MessageDialog.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/utils/MessageDialog.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/MessageDialog.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/utils/PZAwarePositionCallback.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/PZAwarePositionCallback.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/utils/PZAwarePositionCallback.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/PZAwarePositionCallback.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/utils/Uploader.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/Uploader.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/utils/Uploader.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/Uploader.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/utils/Urls.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/Urls.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/utils/Urls.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/Urls.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/utils/html5dnd.js b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/html5dnd.js similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/utils/html5dnd.js rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/utils/html5dnd.js diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/ActionDropDown.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/ActionDropDown.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/ActionDropDown.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/ActionDropDown.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/ClonedWidget.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/ClonedWidget.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/ClonedWidget.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/ClonedWidget.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/ContextMenu.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/ContextMenu.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/ContextMenu.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/ContextMenu.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/DropDownButton.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/DropDownButton.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/DropDownButton.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/DropDownButton.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/ExpiredServiceOverlay.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/ExpiredServiceOverlay.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/ExpiredServiceOverlay.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/ExpiredServiceOverlay.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/ExpiredServiceOverlay.ui.xml b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/ExpiredServiceOverlay.ui.xml similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/ExpiredServiceOverlay.ui.xml rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/ExpiredServiceOverlay.ui.xml diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/Icon.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/Icon.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/Icon.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/Icon.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/LabeledTextBox.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/LabeledTextBox.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/LabeledTextBox.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/LabeledTextBox.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/TextButton.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/TextButton.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/TextButton.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/TextButton.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/Toolbar.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/Toolbar.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/Toolbar.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/Toolbar.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/Validator.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/Validator.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/Validator.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/Validator.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/Box.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/Box.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/Box.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/Box.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/BoxRegistry.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/BoxRegistry.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/BoxRegistry.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/BoxRegistry.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/ColumnLayout.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/ColumnLayout.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/ColumnLayout.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/ColumnLayout.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/HandlerPanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/HandlerPanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/HandlerPanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/HandlerPanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/Layout.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/Layout.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/Layout.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/Layout.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/LayoutChangeListener.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/LayoutChangeListener.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/LayoutChangeListener.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/LayoutChangeListener.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/WorkAreaPanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/WorkAreaPanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/boxes/WorkAreaPanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/boxes/WorkAreaPanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/dnd/DragSource.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/dnd/DragSource.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/dnd/DragSource.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/dnd/DragSource.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/dnd/DragSourcePanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/dnd/DragSourcePanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/dnd/DragSourcePanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/dnd/DragSourcePanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/dnd/DragSourceSupport.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/dnd/DragSourceSupport.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/dnd/DragSourceSupport.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/dnd/DragSourceSupport.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/dnd/DropTarget.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/dnd/DropTarget.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/dnd/DropTarget.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/dnd/DropTarget.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/AdditionalChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/AdditionalChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/AdditionalChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/AdditionalChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/BooleanPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/BooleanPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/BooleanPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/BooleanPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/ChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/ChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/ChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/ChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/ColorChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/ColorChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/ColorChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/ColorChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/CountryChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/CountryChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/CountryChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/CountryChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/EditableProperties.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/EditableProperties.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/EditableProperties.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/EditableProperties.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/EditableProperty.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/EditableProperty.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/EditableProperty.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/EditableProperty.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/FloatPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/FloatPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/FloatPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/FloatPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/IntegerPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/IntegerPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/IntegerPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/IntegerPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/LanguageChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/LanguageChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/LanguageChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/LanguageChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/NonNegativeFloatPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/NonNegativeFloatPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/NonNegativeFloatPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/NonNegativeFloatPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/NonNegativeIntegerPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/NonNegativeIntegerPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/NonNegativeIntegerPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/NonNegativeIntegerPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/PropertiesPanel.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/PropertiesPanel.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/PropertiesPanel.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/PropertiesPanel.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/PropertyChangeListener.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/PropertyChangeListener.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/PropertyChangeListener.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/PropertyChangeListener.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/PropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/PropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/PropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/PropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/ScalingChoicePropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/ScalingChoicePropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/ScalingChoicePropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/ScalingChoicePropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/StringPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/StringPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/StringPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/StringPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/SubsetJSONPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/SubsetJSONPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/SubsetJSONPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/SubsetJSONPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/TextAreaPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/TextAreaPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/TextAreaPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/TextAreaPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/TextPropertyEditor.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/TextPropertyEditor.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/TextPropertyEditor.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/TextPropertyEditor.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/widgets/properties/TextPropertyEditorBase.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/TextPropertyEditorBase.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/widgets/properties/TextPropertyEditorBase.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/widgets/properties/TextPropertyEditorBase.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/ComponentImportWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/ComponentImportWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/ComponentImportWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/ComponentImportWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/ComponentRenameWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/ComponentRenameWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/ComponentRenameWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/ComponentRenameWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/ComponentUploadWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/ComponentUploadWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/ComponentUploadWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/ComponentUploadWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/DownloadUserSourceWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/DownloadUserSourceWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/DownloadUserSourceWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/DownloadUserSourceWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/FileUploadWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/FileUploadWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/FileUploadWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/FileUploadWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/InputTemplateUrlWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/InputTemplateUrlWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/InputTemplateUrlWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/InputTemplateUrlWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/KeystoreUploadWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/KeystoreUploadWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/KeystoreUploadWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/KeystoreUploadWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/NewProjectWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/NewProjectWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/NewProjectWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/NewProjectWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/NewUrlDialogCallback.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/NewUrlDialogCallback.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/NewUrlDialogCallback.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/NewUrlDialogCallback.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/ProjectUploadWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/ProjectUploadWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/ProjectUploadWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/ProjectUploadWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/RequestNewProjectNameWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/RequestNewProjectNameWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/RequestNewProjectNameWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/RequestNewProjectNameWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/RequestProjectNewNameInterface.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/RequestProjectNewNameInterface.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/RequestProjectNewNameInterface.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/RequestProjectNewNameInterface.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/TemplateUploadWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/TemplateUploadWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/TemplateUploadWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/TemplateUploadWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/UrlImportWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/UrlImportWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/UrlImportWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/UrlImportWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/Wizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/Wizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/Wizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/Wizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/wizards/youngandroid/NewYoungAndroidProjectWizard.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/youngandroid/NewYoungAndroidProjectWizard.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/wizards/youngandroid/NewYoungAndroidProjectWizard.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/wizards/youngandroid/NewYoungAndroidProjectWizard.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/youngandroid/TextValidators.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/youngandroid/TextValidators.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/youngandroid/TextValidators.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/youngandroid/TextValidators.java diff --git a/appinventor/appengine/src/com/google/appinventor/client/youngandroid/YoungAndroidFormUpgrader.java b/appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/youngandroid/YoungAndroidFormUpgrader.java similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/client/youngandroid/YoungAndroidFormUpgrader.java rename to appinventor/appengine-frontend/src/main/java/com/google/appinventor/client/youngandroid/YoungAndroidFormUpgrader.java diff --git a/appinventor/appengine/tests/com/google/appinventor/client/MultiRegistryTest.java b/appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/MultiRegistryTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/client/MultiRegistryTest.java rename to appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/MultiRegistryTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/client/OdeTest.java b/appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/OdeTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/client/OdeTest.java rename to appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/OdeTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/client/RegistryTest.java b/appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/RegistryTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/client/RegistryTest.java rename to appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/RegistryTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/client/editor/simple/ComponentDatabaseTest.java b/appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/editor/simple/ComponentDatabaseTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/client/editor/simple/ComponentDatabaseTest.java rename to appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/editor/simple/ComponentDatabaseTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/client/editor/youngandroid/properties/ListWithNoneTest.java b/appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/editor/youngandroid/properties/ListWithNoneTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/client/editor/youngandroid/properties/ListWithNoneTest.java rename to appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/editor/youngandroid/properties/ListWithNoneTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/client/explorer/project/ProjectComparatorsTest.java b/appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/explorer/project/ProjectComparatorsTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/client/explorer/project/ProjectComparatorsTest.java rename to appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/explorer/project/ProjectComparatorsTest.java diff --git a/appinventor/appengine/tests/com/google/appinventor/client/youngandroid/TextValidatorsTest.java b/appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/youngandroid/TextValidatorsTest.java similarity index 100% rename from appinventor/appengine/tests/com/google/appinventor/client/youngandroid/TextValidatorsTest.java rename to appinventor/appengine-frontend/src/test/java/com/google/appinventor/client/youngandroid/TextValidatorsTest.java diff --git a/appinventor/appengine-shared/build.gradle.kts b/appinventor/appengine-shared/build.gradle.kts new file mode 100644 index 00000000000..da1493ee49e --- /dev/null +++ b/appinventor/appengine-shared/build.gradle.kts @@ -0,0 +1,3 @@ +plugins { + `java-library` +} \ No newline at end of file diff --git a/appinventor/appengine/build.xml b/appinventor/appengine-shared/build.xml similarity index 100% rename from appinventor/appengine/build.xml rename to appinventor/appengine-shared/build.xml diff --git a/appinventor/appengine/src/com/google/appinventor/images/YRLogo.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/YRLogo.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/YRLogo.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/YRLogo.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/accelerometersensor.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/accelerometersensor.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/accelerometersensor.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/accelerometersensor.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/activityStarter.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/activityStarter.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/activityStarter.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/activityStarter.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/appinvlogo-32.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/appinvlogo-32.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/appinvlogo-32.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/appinvlogo-32.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/arduino.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/arduino.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/arduino.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/arduino.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/ball.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/ball.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/ball.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/ball.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/barcodeScanner.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/barcodeScanner.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/barcodeScanner.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/barcodeScanner.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/barometer.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/barometer.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/barometer.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/barometer.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/bluetooth.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/bluetooth.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/bluetooth.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/bluetooth.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/boxClose.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxClose.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/boxClose.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxClose.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/boxMenu.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxMenu.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/boxMenu.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxMenu.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/boxMinimize.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxMinimize.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/boxMinimize.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxMinimize.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/boxRestore.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxRestore.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/boxRestore.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxRestore.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/button.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/button.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/button.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/button.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/camcorder.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/camcorder.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/camcorder.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/camcorder.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/camera.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/camera.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/camera.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/camera.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/canvas.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/canvas.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/canvas.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/canvas.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/chart.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/chart.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/chart.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/chart.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/chartData.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/chartData.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/chartData.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/chartData.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/checkbox.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/checkbox.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/checkbox.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/checkbox.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/circle.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/circle.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/circle.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/circle.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/clock.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/clock.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/clock.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/clock.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/close.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/close.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/close.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/close.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/cloudDB.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/cloudDB.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/cloudDB.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/cloudDB.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/codi_vert.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/codi_vert.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/codi_vert.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/codi_vert.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/colors.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/colors.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/colors.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/colors.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/contactPicker.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/contactPicker.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/contactPicker.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/contactPicker.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/control.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/control.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/control.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/control.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/corner.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/corner.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/corner.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/corner.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/corner_green.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/corner_green.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/corner_green.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/corner_green.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/dataFile.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/dataFile.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/dataFile.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/dataFile.png diff --git a/appinventor/appengine/src/com/google/appinventor/images/datePicker.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/datePicker.png similarity index 100% rename from appinventor/appengine/src/com/google/appinventor/images/datePicker.png rename to appinventor/appengine-shared/src/main/java/com/google/appinventor/images/datePicker.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/delete.png b/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..62864f912d07ec7e96d4cc7908112fb845ad406c GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n3BBRT^Rni_n+Ah4nJ za0`Jj;Gn@pc-r)0WwqH{6GScqHIZJ(+e*sM0 z>qBlOK9ifo6SVr=H`~&UdF(YeZYWgb|I@WpusHFQ>E5jRu=#73x~HGl{da7dw^L@) zg Date: Sat, 15 Oct 2022 04:57:42 +0530 Subject: [PATCH 29/35] java toolchain --- appinventor/component-annotations/build.gradle.kts | 6 ++++++ appinventor/component-scripts/build.gradle.kts | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/appinventor/component-annotations/build.gradle.kts b/appinventor/component-annotations/build.gradle.kts index 4313730f397..56f370a3f0f 100644 --- a/appinventor/component-annotations/build.gradle.kts +++ b/appinventor/component-annotations/build.gradle.kts @@ -2,6 +2,12 @@ plugins { `java-library` } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} + dependencies { implementation(projects.componentConstants) } diff --git a/appinventor/component-scripts/build.gradle.kts b/appinventor/component-scripts/build.gradle.kts index 4059b3b9149..0b9f0211024 100644 --- a/appinventor/component-scripts/build.gradle.kts +++ b/appinventor/component-scripts/build.gradle.kts @@ -2,6 +2,12 @@ plugins { java } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} + dependencies { implementation(projects.commonUtils) implementation(projects.componentConstants) From d46f259ee98e88d944026c154f665301d98664b3 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Sat, 15 Oct 2022 14:27:42 +0530 Subject: [PATCH 30/35] Setup appengine-backend --- appinventor/appengine-backend/build.gradle.kts | 12 ++++++++---- .../src/main/webapp}/WEB-INF/appengine-web.xml | 0 .../src/main/webapp}/WEB-INF/log4j.properties | 0 .../src/main/webapp}/WEB-INF/logging.properties | 0 .../src/main/webapp}/WEB-INF/queue.xml | 0 .../src/main/webapp}/WEB-INF/web.xml | 0 appinventor/appengine-shared/build.gradle.kts | 6 ++++++ .../com/google/appinventor/images/YRLogo.png | Bin .../appinventor/images/accelerometersensor.png | Bin .../google/appinventor/images/activityStarter.png | Bin .../com/google/appinventor/images/appinvlogo-32.png | Bin .../com/google/appinventor/images/arduino.png | Bin .../com/google/appinventor/images/ball.png | Bin .../google/appinventor/images/barcodeScanner.png | Bin .../com/google/appinventor/images/barometer.png | Bin .../com/google/appinventor/images/bluetooth.png | Bin .../com/google/appinventor/images/boxClose.png | Bin .../com/google/appinventor/images/boxMenu.png | Bin .../com/google/appinventor/images/boxMinimize.png | Bin .../com/google/appinventor/images/boxRestore.png | Bin .../com/google/appinventor/images/button.png | Bin .../com/google/appinventor/images/camcorder.png | Bin .../com/google/appinventor/images/camera.png | Bin .../com/google/appinventor/images/canvas.png | Bin .../com/google/appinventor/images/chart.png | Bin .../com/google/appinventor/images/chartData.png | Bin .../com/google/appinventor/images/checkbox.png | Bin .../com/google/appinventor/images/circle.png | Bin .../com/google/appinventor/images/clock.png | Bin .../com/google/appinventor/images/close.png | Bin .../com/google/appinventor/images/cloudDB.png | Bin .../com/google/appinventor/images/codi_vert.png | Bin .../com/google/appinventor/images/colors.png | Bin .../com/google/appinventor/images/contactPicker.png | Bin .../com/google/appinventor/images/control.png | Bin .../com/google/appinventor/images/corner.png | Bin .../com/google/appinventor/images/corner_green.png | Bin .../com/google/appinventor/images/dataFile.png | Bin .../com/google/appinventor/images/datePicker.png | Bin .../com/google/appinventor/images/delete.png | Bin .../com/google/appinventor/images/dictionaries.png | Bin .../com/google/appinventor/images/emailPicker.png | Bin .../com/google/appinventor/images/extension.png | Bin .../google/appinventor/images/featurecollection.png | Bin .../com/google/appinventor/images/file.png | Bin .../com/google/appinventor/images/find.png | Bin .../com/google/appinventor/images/firebaseDB.png | Bin .../com/google/appinventor/images/form.png | Bin .../com/google/appinventor/images/fusiontables.png | Bin .../com/google/appinventor/images/gameClient.png | Bin .../com/google/appinventor/images/get-app.png | Bin .../com/google/appinventor/images/graydient.png | Bin .../com/google/appinventor/images/groupGame.png | Bin .../google/appinventor/images/gyroscopesensor.png | Bin .../com/google/appinventor/images/help.png | Bin .../com/google/appinventor/images/horizontal.png | Bin .../com/google/appinventor/images/hygrometer.png | Bin .../google/appinventor/images/iOSBookmarkBlack.png | Bin .../google/appinventor/images/iOSBookmarkWhite.png | Bin .../com/google/appinventor/images/iPadBlackFB.png | Bin .../google/appinventor/images/iPadLeftWhiteFB.png | Bin .../google/appinventor/images/iPadRightBlack.png | Bin .../google/appinventor/images/iPadRightWhite.png | Bin .../google/appinventor/images/iPhoneLeftBlack.png | Bin .../google/appinventor/images/iPhoneLeftWhiteFB.png | Bin .../google/appinventor/images/iPhoneRightBlack.png | Bin .../google/appinventor/images/iPhoneRightWhite.png | Bin .../com/google/appinventor/images/image.png | Bin .../com/google/appinventor/images/imagePicker.png | Bin .../com/google/appinventor/images/imageSprite.png | Bin .../com/google/appinventor/images/label.png | Bin .../google/appinventor/images/legoMindstormsEv3.png | Bin .../google/appinventor/images/legoMindstormsNxt.png | Bin .../com/google/appinventor/images/lightsensor.png | Bin .../com/google/appinventor/images/linestring.png | Bin .../com/google/appinventor/images/listPicker.png | Bin .../com/google/appinventor/images/listView.png | Bin .../com/google/appinventor/images/listbox.png | Bin .../com/google/appinventor/images/lists.png | Bin .../google/appinventor/images/locationSensor.png | Bin .../com/google/appinventor/images/logger.png | Bin .../com/google/appinventor/images/logic.png | Bin .../com/google/appinventor/images/logo.png | Bin .../google/appinventor/images/magneticSensor.png | Bin .../com/google/appinventor/images/map.png | Bin .../com/google/appinventor/images/marker.png | Bin .../com/google/appinventor/images/math.png | Bin .../google/appinventor/images/mediaIcon_audio.png | Bin .../com/google/appinventor/images/mediaIcon_img.png | Bin .../google/appinventor/images/mediaIcon_video.png | Bin .../com/google/appinventor/images/mediastore.png | Bin .../com/google/appinventor/images/navigation.png | Bin .../com/google/appinventor/images/nearfield.png | Bin .../com/google/appinventor/images/notifier.png | Bin .../google/appinventor/images/orientationsensor.png | Bin .../google/appinventor/images/passwordtextbox.png | Bin .../com/google/appinventor/images/pedometer.png | Bin .../com/google/appinventor/images/phoneCall.png | Bin .../google/appinventor/images/phoneNumberPicker.png | Bin .../com/google/appinventor/images/phonebar.png | Bin .../appinventor/images/phonebarAndroidMaterial.png | Bin .../com/google/appinventor/images/phoneip.png | Bin .../com/google/appinventor/images/player.png | Bin .../com/google/appinventor/images/polygon.png | Bin .../com/google/appinventor/images/procedures.png | Bin .../com/google/appinventor/images/progressbar.png | Bin .../google/appinventor/images/proximitysensor.png | Bin .../com/google/appinventor/images/purr.png | Bin .../com/google/appinventor/images/radiobutton.png | Bin .../com/google/appinventor/images/rectangle.png | Bin .../com/google/appinventor/images/recyclerView.png | Bin .../com/google/appinventor/images/sharing.png | Bin .../com/google/appinventor/images/sky.png | Bin .../com/google/appinventor/images/slider.png | Bin .../com/google/appinventor/images/sound.png | Bin .../com/google/appinventor/images/soundEffect.png | Bin .../com/google/appinventor/images/soundRecorder.png | Bin .../google/appinventor/images/speechRecognizer.png | Bin .../com/google/appinventor/images/spin_16.gif | Bin .../com/google/appinventor/images/spinner.png | Bin .../com/google/appinventor/images/spreadsheet.png | Bin .../com/google/appinventor/images/switch.png | Bin .../com/google/appinventor/images/table.png | Bin .../com/google/appinventor/images/talkToMeLogo.png | Bin .../com/google/appinventor/images/text.png | Bin .../com/google/appinventor/images/textToSpeech.png | Bin .../com/google/appinventor/images/textbox.png | Bin .../com/google/appinventor/images/texting.png | Bin .../com/google/appinventor/images/thermometer.png | Bin .../com/google/appinventor/images/timePicker.png | Bin .../com/google/appinventor/images/tinyDB.png | Bin .../com/google/appinventor/images/tinyWebDB.png | Bin .../com/google/appinventor/images/translator.png | Bin .../com/google/appinventor/images/twitter.png | Bin .../com/google/appinventor/images/variables.png | Bin .../com/google/appinventor/images/vertical.png | Bin .../com/google/appinventor/images/videoPlayer.png | Bin .../com/google/appinventor/images/voting.png | Bin .../com/google/appinventor/images/web.png | Bin .../com/google/appinventor/images/webDB.png | Bin .../com/google/appinventor/images/webviewer.png | Bin .../com/google/appinventor/images/webviewerbig.png | Bin .../com/google/appinventor/images/wilson.png | Bin .../com/google/appinventor/images/yandex.png | Bin 144 files changed, 14 insertions(+), 4 deletions(-) rename appinventor/{appengine-shared/war => appengine-backend/src/main/webapp}/WEB-INF/appengine-web.xml (100%) rename appinventor/{appengine-shared/war => appengine-backend/src/main/webapp}/WEB-INF/log4j.properties (100%) rename appinventor/{appengine-shared/war => appengine-backend/src/main/webapp}/WEB-INF/logging.properties (100%) rename appinventor/{appengine-shared/war => appengine-backend/src/main/webapp}/WEB-INF/queue.xml (100%) rename appinventor/{appengine-shared/war => appengine-backend/src/main/webapp}/WEB-INF/web.xml (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/YRLogo.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/accelerometersensor.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/activityStarter.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/appinvlogo-32.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/arduino.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/ball.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/barcodeScanner.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/barometer.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/bluetooth.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/boxClose.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/boxMenu.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/boxMinimize.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/boxRestore.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/button.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/camcorder.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/camera.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/canvas.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/chart.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/chartData.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/checkbox.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/circle.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/clock.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/close.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/cloudDB.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/codi_vert.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/colors.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/contactPicker.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/control.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/corner.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/corner_green.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/dataFile.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/datePicker.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/delete.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/dictionaries.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/emailPicker.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/extension.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/featurecollection.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/file.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/find.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/firebaseDB.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/form.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/fusiontables.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/gameClient.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/get-app.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/graydient.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/groupGame.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/gyroscopesensor.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/help.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/horizontal.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/hygrometer.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/iOSBookmarkBlack.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/iOSBookmarkWhite.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/iPadBlackFB.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/iPadLeftWhiteFB.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/iPadRightBlack.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/iPadRightWhite.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/iPhoneLeftBlack.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/iPhoneLeftWhiteFB.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/iPhoneRightBlack.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/iPhoneRightWhite.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/image.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/imagePicker.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/imageSprite.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/label.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/legoMindstormsEv3.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/legoMindstormsNxt.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/lightsensor.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/linestring.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/listPicker.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/listView.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/listbox.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/lists.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/locationSensor.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/logger.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/logic.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/logo.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/magneticSensor.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/map.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/marker.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/math.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/mediaIcon_audio.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/mediaIcon_img.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/mediaIcon_video.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/mediastore.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/navigation.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/nearfield.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/notifier.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/orientationsensor.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/passwordtextbox.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/pedometer.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/phoneCall.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/phoneNumberPicker.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/phonebar.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/phonebarAndroidMaterial.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/phoneip.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/player.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/polygon.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/procedures.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/progressbar.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/proximitysensor.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/purr.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/radiobutton.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/rectangle.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/recyclerView.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/sharing.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/sky.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/slider.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/sound.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/soundEffect.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/soundRecorder.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/speechRecognizer.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/spin_16.gif (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/spinner.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/spreadsheet.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/switch.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/table.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/talkToMeLogo.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/text.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/textToSpeech.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/textbox.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/texting.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/thermometer.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/timePicker.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/tinyDB.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/tinyWebDB.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/translator.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/twitter.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/variables.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/vertical.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/videoPlayer.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/voting.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/web.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/webDB.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/webviewer.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/webviewerbig.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/wilson.png (100%) rename appinventor/appengine-shared/src/main/{java => resources}/com/google/appinventor/images/yandex.png (100%) diff --git a/appinventor/appengine-backend/build.gradle.kts b/appinventor/appengine-backend/build.gradle.kts index 621ac254778..8ebe7a1c8d8 100644 --- a/appinventor/appengine-backend/build.gradle.kts +++ b/appinventor/appengine-backend/build.gradle.kts @@ -1,7 +1,7 @@ plugins { java war - id("com.google.cloud.tools.appengine") version "2.4.4" + id("com.google.cloud.tools.appengine-standard") version "2.4.4" } group = "com.google.appinventor" @@ -14,14 +14,18 @@ java { } appengine { + tools { + setCloudSdkHome("C:\\Program Files (x86)\\Google\\Cloud SDK\\google-cloud-sdk") + cloudSdkVersion = "405.0.1" + } deploy { version = "1" projectId = "your GCP project ID" } - run { - - } } dependencies { + implementation(projects.appengineShared) + implementation("com.google.appengine:appengine-api-1.0-sdk:2.0.9") + providedCompile("javax.servlet:javax.servlet-api:3.1.0") } diff --git a/appinventor/appengine-shared/war/WEB-INF/appengine-web.xml b/appinventor/appengine-backend/src/main/webapp/WEB-INF/appengine-web.xml similarity index 100% rename from appinventor/appengine-shared/war/WEB-INF/appengine-web.xml rename to appinventor/appengine-backend/src/main/webapp/WEB-INF/appengine-web.xml diff --git a/appinventor/appengine-shared/war/WEB-INF/log4j.properties b/appinventor/appengine-backend/src/main/webapp/WEB-INF/log4j.properties similarity index 100% rename from appinventor/appengine-shared/war/WEB-INF/log4j.properties rename to appinventor/appengine-backend/src/main/webapp/WEB-INF/log4j.properties diff --git a/appinventor/appengine-shared/war/WEB-INF/logging.properties b/appinventor/appengine-backend/src/main/webapp/WEB-INF/logging.properties similarity index 100% rename from appinventor/appengine-shared/war/WEB-INF/logging.properties rename to appinventor/appengine-backend/src/main/webapp/WEB-INF/logging.properties diff --git a/appinventor/appengine-shared/war/WEB-INF/queue.xml b/appinventor/appengine-backend/src/main/webapp/WEB-INF/queue.xml similarity index 100% rename from appinventor/appengine-shared/war/WEB-INF/queue.xml rename to appinventor/appengine-backend/src/main/webapp/WEB-INF/queue.xml diff --git a/appinventor/appengine-shared/war/WEB-INF/web.xml b/appinventor/appengine-backend/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from appinventor/appengine-shared/war/WEB-INF/web.xml rename to appinventor/appengine-backend/src/main/webapp/WEB-INF/web.xml diff --git a/appinventor/appengine-shared/build.gradle.kts b/appinventor/appengine-shared/build.gradle.kts index da1493ee49e..96b60b5f87a 100644 --- a/appinventor/appengine-shared/build.gradle.kts +++ b/appinventor/appengine-shared/build.gradle.kts @@ -1,3 +1,9 @@ plugins { `java-library` +} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } } \ No newline at end of file diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/YRLogo.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/YRLogo.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/YRLogo.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/YRLogo.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/accelerometersensor.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/accelerometersensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/accelerometersensor.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/accelerometersensor.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/activityStarter.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/activityStarter.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/activityStarter.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/activityStarter.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/appinvlogo-32.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/appinvlogo-32.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/appinvlogo-32.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/appinvlogo-32.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/arduino.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/arduino.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/arduino.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/arduino.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/ball.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/ball.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/ball.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/ball.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/barcodeScanner.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/barcodeScanner.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/barcodeScanner.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/barcodeScanner.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/barometer.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/barometer.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/barometer.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/barometer.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/bluetooth.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/bluetooth.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/bluetooth.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/bluetooth.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxClose.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxClose.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxClose.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxClose.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxMenu.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxMenu.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxMenu.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxMenu.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxMinimize.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxMinimize.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxMinimize.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxMinimize.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxRestore.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxRestore.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/boxRestore.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxRestore.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/button.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/button.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/button.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/button.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/camcorder.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/camcorder.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/camcorder.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/camcorder.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/camera.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/camera.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/camera.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/camera.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/canvas.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/canvas.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/canvas.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/canvas.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/chart.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/chart.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/chart.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/chart.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/chartData.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/chartData.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/chartData.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/chartData.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/checkbox.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/checkbox.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/checkbox.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/checkbox.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/circle.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/circle.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/circle.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/circle.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/clock.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/clock.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/clock.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/clock.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/close.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/close.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/close.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/close.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/cloudDB.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/cloudDB.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/cloudDB.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/cloudDB.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/codi_vert.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/codi_vert.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/codi_vert.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/codi_vert.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/colors.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/colors.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/colors.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/colors.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/contactPicker.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/contactPicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/contactPicker.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/contactPicker.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/control.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/control.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/control.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/control.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/corner.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/corner.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/corner.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/corner.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/corner_green.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/corner_green.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/corner_green.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/corner_green.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/dataFile.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/dataFile.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/dataFile.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/dataFile.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/datePicker.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/datePicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/datePicker.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/datePicker.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/delete.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/delete.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/delete.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/delete.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/dictionaries.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/dictionaries.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/dictionaries.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/dictionaries.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/emailPicker.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/emailPicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/emailPicker.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/emailPicker.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/extension.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/extension.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/extension.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/extension.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/featurecollection.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/featurecollection.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/featurecollection.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/featurecollection.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/file.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/file.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/file.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/file.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/find.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/find.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/find.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/find.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/firebaseDB.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/firebaseDB.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/firebaseDB.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/firebaseDB.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/form.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/form.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/form.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/form.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/fusiontables.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/fusiontables.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/fusiontables.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/fusiontables.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/gameClient.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/gameClient.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/gameClient.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/gameClient.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/get-app.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/get-app.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/get-app.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/get-app.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/graydient.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/graydient.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/graydient.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/graydient.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/groupGame.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/groupGame.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/groupGame.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/groupGame.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/gyroscopesensor.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/gyroscopesensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/gyroscopesensor.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/gyroscopesensor.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/help.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/help.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/help.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/help.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/horizontal.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/horizontal.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/horizontal.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/horizontal.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/hygrometer.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/hygrometer.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/hygrometer.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/hygrometer.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iOSBookmarkBlack.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iOSBookmarkBlack.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iOSBookmarkBlack.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iOSBookmarkBlack.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iOSBookmarkWhite.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iOSBookmarkWhite.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iOSBookmarkWhite.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iOSBookmarkWhite.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPadBlackFB.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadBlackFB.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPadBlackFB.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadBlackFB.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPadLeftWhiteFB.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadLeftWhiteFB.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPadLeftWhiteFB.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadLeftWhiteFB.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPadRightBlack.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadRightBlack.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPadRightBlack.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadRightBlack.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPadRightWhite.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadRightWhite.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPadRightWhite.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadRightWhite.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPhoneLeftBlack.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneLeftBlack.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPhoneLeftBlack.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneLeftBlack.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPhoneLeftWhiteFB.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneLeftWhiteFB.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPhoneLeftWhiteFB.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneLeftWhiteFB.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPhoneRightBlack.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneRightBlack.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPhoneRightBlack.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneRightBlack.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPhoneRightWhite.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneRightWhite.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/iPhoneRightWhite.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneRightWhite.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/image.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/image.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/image.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/image.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/imagePicker.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/imagePicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/imagePicker.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/imagePicker.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/imageSprite.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/imageSprite.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/imageSprite.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/imageSprite.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/label.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/label.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/label.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/label.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/legoMindstormsEv3.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/legoMindstormsEv3.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/legoMindstormsEv3.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/legoMindstormsEv3.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/legoMindstormsNxt.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/legoMindstormsNxt.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/legoMindstormsNxt.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/legoMindstormsNxt.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/lightsensor.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/lightsensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/lightsensor.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/lightsensor.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/linestring.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/linestring.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/linestring.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/linestring.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/listPicker.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listPicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/listPicker.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listPicker.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/listView.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listView.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/listView.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listView.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/listbox.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listbox.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/listbox.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listbox.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/lists.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/lists.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/lists.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/lists.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/locationSensor.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/locationSensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/locationSensor.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/locationSensor.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/logger.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logger.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/logger.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logger.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/logic.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logic.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/logic.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logic.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/logo.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logo.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/logo.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logo.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/magneticSensor.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/magneticSensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/magneticSensor.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/magneticSensor.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/map.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/map.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/map.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/map.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/marker.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/marker.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/marker.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/marker.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/math.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/math.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/math.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/math.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/mediaIcon_audio.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_audio.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/mediaIcon_audio.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_audio.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/mediaIcon_img.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_img.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/mediaIcon_img.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_img.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/mediaIcon_video.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_video.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/mediaIcon_video.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_video.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/mediastore.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediastore.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/mediastore.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediastore.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/navigation.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/navigation.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/navigation.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/navigation.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/nearfield.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/nearfield.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/nearfield.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/nearfield.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/notifier.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/notifier.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/notifier.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/notifier.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/orientationsensor.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/orientationsensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/orientationsensor.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/orientationsensor.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/passwordtextbox.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/passwordtextbox.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/passwordtextbox.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/passwordtextbox.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/pedometer.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/pedometer.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/pedometer.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/pedometer.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/phoneCall.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneCall.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/phoneCall.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneCall.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/phoneNumberPicker.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneNumberPicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/phoneNumberPicker.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneNumberPicker.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/phonebar.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phonebar.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/phonebar.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phonebar.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/phonebarAndroidMaterial.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phonebarAndroidMaterial.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/phonebarAndroidMaterial.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phonebarAndroidMaterial.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/phoneip.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneip.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/phoneip.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneip.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/player.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/player.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/player.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/player.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/polygon.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/polygon.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/polygon.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/polygon.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/procedures.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/procedures.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/procedures.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/procedures.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/progressbar.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/progressbar.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/progressbar.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/progressbar.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/proximitysensor.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/proximitysensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/proximitysensor.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/proximitysensor.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/purr.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/purr.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/purr.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/purr.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/radiobutton.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/radiobutton.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/radiobutton.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/radiobutton.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/rectangle.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/rectangle.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/rectangle.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/rectangle.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/recyclerView.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/recyclerView.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/recyclerView.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/recyclerView.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/sharing.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sharing.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/sharing.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sharing.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/sky.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sky.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/sky.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sky.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/slider.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/slider.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/slider.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/slider.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/sound.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sound.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/sound.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sound.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/soundEffect.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/soundEffect.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/soundEffect.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/soundEffect.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/soundRecorder.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/soundRecorder.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/soundRecorder.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/soundRecorder.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/speechRecognizer.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/speechRecognizer.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/speechRecognizer.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/speechRecognizer.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/spin_16.gif b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spin_16.gif similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/spin_16.gif rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spin_16.gif diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/spinner.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spinner.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/spinner.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spinner.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/spreadsheet.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spreadsheet.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/spreadsheet.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spreadsheet.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/switch.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/switch.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/switch.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/switch.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/table.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/table.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/table.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/table.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/talkToMeLogo.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/talkToMeLogo.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/talkToMeLogo.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/talkToMeLogo.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/text.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/text.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/text.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/text.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/textToSpeech.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/textToSpeech.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/textToSpeech.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/textToSpeech.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/textbox.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/textbox.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/textbox.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/textbox.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/texting.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/texting.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/texting.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/texting.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/thermometer.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/thermometer.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/thermometer.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/thermometer.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/timePicker.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/timePicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/timePicker.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/timePicker.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/tinyDB.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/tinyDB.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/tinyDB.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/tinyDB.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/tinyWebDB.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/tinyWebDB.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/tinyWebDB.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/tinyWebDB.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/translator.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/translator.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/translator.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/translator.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/twitter.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/twitter.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/twitter.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/twitter.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/variables.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/variables.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/variables.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/variables.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/vertical.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/vertical.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/vertical.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/vertical.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/videoPlayer.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/videoPlayer.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/videoPlayer.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/videoPlayer.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/voting.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/voting.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/voting.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/voting.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/web.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/web.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/web.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/web.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/webDB.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webDB.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/webDB.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webDB.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/webviewer.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webviewer.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/webviewer.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webviewer.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/webviewerbig.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webviewerbig.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/webviewerbig.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webviewerbig.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/wilson.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/wilson.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/wilson.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/wilson.png diff --git a/appinventor/appengine-shared/src/main/java/com/google/appinventor/images/yandex.png b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/yandex.png similarity index 100% rename from appinventor/appengine-shared/src/main/java/com/google/appinventor/images/yandex.png rename to appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/yandex.png From a6b21cd4c85b8a3fd0090e1dfe7b07bd2f7af357 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Sat, 15 Oct 2022 22:21:12 +0530 Subject: [PATCH 31/35] Fix frontend and components --- .../appengine-frontend/build.gradle.kts | 40 + .../com/google/appinventor}/YaClient.gwt.xml | 0 appinventor/appengine-shared/build.gradle.kts | 11 + appinventor/common-utils/build.gradle.kts | 9 +- .../appinventor/common/utils/StringUtils.java | 4 +- .../appinventor/common}/CommonUtils.gwt.xml | 0 appinventor/common-version/build.gradle.kts | 9 +- .../appinventor/common}/CommonVersion.gwt.xml | 0 .../component-annotations/build.gradle.kts | 8 +- .../component-constants/build.gradle.kts | 14 +- .../components}/CommonConstants.gwt.xml | 0 .../component-scripts/build.gradle.kts | 6 - .../scripts/ComponentProcessor.java | 5977 +++++++++-------- .../javax.annotation.processing.Processor | 0 appinventor/components/build.gradle.kts | 4 +- .../components/runtime/CloudDB.java | 2 +- 16 files changed, 3072 insertions(+), 3012 deletions(-) rename appinventor/appengine-frontend/{ => src/main/resources/com/google/appinventor}/YaClient.gwt.xml (100%) rename appinventor/common-utils/{ => src/main/resources/com/google/appinventor/common}/CommonUtils.gwt.xml (100%) rename appinventor/common-version/{ => src/main/resources/com/google/appinventor/common}/CommonVersion.gwt.xml (100%) rename appinventor/component-constants/{ => src/main/resources/com/google/appinventor/components}/CommonConstants.gwt.xml (100%) rename appinventor/{component-annotations => component-scripts}/src/main/resources/META-INF/services/javax.annotation.processing.Processor (100%) diff --git a/appinventor/appengine-frontend/build.gradle.kts b/appinventor/appengine-frontend/build.gradle.kts index c922b588813..4a112981e10 100644 --- a/appinventor/appengine-frontend/build.gradle.kts +++ b/appinventor/appengine-frontend/build.gradle.kts @@ -1,5 +1,7 @@ plugins { java + war + id("org.docstr.gwt") version "1.1.21" } group = "com.google.appinventor" @@ -9,7 +11,45 @@ java { toolchain { languageVersion.set(JavaLanguageVersion.of(8)) } + sourceSets { + main { + java { + srcDirs("../components/build/generated/ap_generated_sources/release/out/") + exclude("*.md", "*.json", "*.txt") + } + } + } +} + +tasks.withType { + options.encoding = "UTF-8" +} + +//project(":components").afterEvaluate { +// java.sourceSets["main"].java.srcDir( +// project(":components").sourceSets["main"].output.generatedSourcesDirs.files.filter { +// it.name in listOf( +// "AutogeneratedOdeMessages.java", +// "ComponentsTranslation.java" +// ) +// } +// ) +//} + +gwt { + gwtVersion = "2.10.0" + modules("com.google.appinventor.YaClient") } dependencies { + implementation(projects.commonUtils) + implementation(projects.commonVersion) + implementation(projects.componentConstants) + implementation(projects.appengineShared) + implementation("com.google.gwt:gwt-user:2.10.0") + implementation("com.allen-sauer.gwt.dnd:gwt-dnd:3.2.3") + implementation("com.googlecode.gwtquery:gwtquery:1.5-beta1") + implementation("com.google.gwt:gwt-incubator:2.0.1") + implementation("org.pepstock:charba:2.5") + implementation("org.json:json:20220320") } diff --git a/appinventor/appengine-frontend/YaClient.gwt.xml b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/YaClient.gwt.xml similarity index 100% rename from appinventor/appengine-frontend/YaClient.gwt.xml rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/YaClient.gwt.xml diff --git a/appinventor/appengine-shared/build.gradle.kts b/appinventor/appengine-shared/build.gradle.kts index 96b60b5f87a..daff6940b62 100644 --- a/appinventor/appengine-shared/build.gradle.kts +++ b/appinventor/appengine-shared/build.gradle.kts @@ -1,9 +1,20 @@ plugins { `java-library` + id("org.docstr.gwt") version "1.1.21" // TODO: should apply gwt-base } java { toolchain { languageVersion.set(JavaLanguageVersion.of(8)) } +} + +gwt { + gwtVersion = "2.10.0" +} + +dependencies { + api(projects.commonUtils) + api(projects.componentConstants) + api("com.google.guava:guava-gwt:20.0") } \ No newline at end of file diff --git a/appinventor/common-utils/build.gradle.kts b/appinventor/common-utils/build.gradle.kts index 030c09a7042..ab719e34568 100644 --- a/appinventor/common-utils/build.gradle.kts +++ b/appinventor/common-utils/build.gradle.kts @@ -1,11 +1,12 @@ plugins { `java-library` -// id("org.docstr.gwt") version "1.1.21" + id("org.docstr.gwt") version "1.1.21" // TODO: should apply gwt-base } -//gwt { -// gwtVersion = "2.8.1" -//} +gwt { + gwtVersion = "2.10.0" + modules("com.google.appinventor.common.CommonVersion") +} java { toolchain { diff --git a/appinventor/common-utils/src/main/java/com/google/appinventor/common/utils/StringUtils.java b/appinventor/common-utils/src/main/java/com/google/appinventor/common/utils/StringUtils.java index 4eb4edad6fa..feef3eb3b0c 100644 --- a/appinventor/common-utils/src/main/java/com/google/appinventor/common/utils/StringUtils.java +++ b/appinventor/common-utils/src/main/java/com/google/appinventor/common/utils/StringUtils.java @@ -252,10 +252,10 @@ public static String normalizeForFilename(String str) { String normalized = VALID_FILENAME_CHARS.retainFrom(str); if (!normalized.isEmpty()) { while (normalized.length() > 2 && - !CharMatcher.javaLetter().matches(normalized.charAt(0))) { + !CharMatcher.JAVA_LETTER.matches(normalized.charAt(0))) { normalized = normalized.substring(1); } - if (CharMatcher.javaLetter().matches(normalized.charAt(0))) { + if (CharMatcher.JAVA_LETTER.matches(normalized.charAt(0))) { return normalized; } } diff --git a/appinventor/common-utils/CommonUtils.gwt.xml b/appinventor/common-utils/src/main/resources/com/google/appinventor/common/CommonUtils.gwt.xml similarity index 100% rename from appinventor/common-utils/CommonUtils.gwt.xml rename to appinventor/common-utils/src/main/resources/com/google/appinventor/common/CommonUtils.gwt.xml diff --git a/appinventor/common-version/build.gradle.kts b/appinventor/common-version/build.gradle.kts index 314c2e5a68a..e3d53818b98 100644 --- a/appinventor/common-version/build.gradle.kts +++ b/appinventor/common-version/build.gradle.kts @@ -4,12 +4,13 @@ import java.text.SimpleDateFormat plugins { `java-library` -// id("org.docstr.gwt") version "1.1.21" + id("org.docstr.gwt") version "1.1.21" // TODO: should apply gwt-base } -//gwt { -// gwtVersion = "2.8.1" -//} +gwt { + gwtVersion = "2.10.0" + modules("com.google.appinventor.common.CommonVersion") +} java { toolchain { diff --git a/appinventor/common-version/CommonVersion.gwt.xml b/appinventor/common-version/src/main/resources/com/google/appinventor/common/CommonVersion.gwt.xml similarity index 100% rename from appinventor/common-version/CommonVersion.gwt.xml rename to appinventor/common-version/src/main/resources/com/google/appinventor/common/CommonVersion.gwt.xml diff --git a/appinventor/component-annotations/build.gradle.kts b/appinventor/component-annotations/build.gradle.kts index 56f370a3f0f..bf1af6a1f14 100644 --- a/appinventor/component-annotations/build.gradle.kts +++ b/appinventor/component-annotations/build.gradle.kts @@ -2,12 +2,6 @@ plugins { `java-library` } -java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(8)) - } -} - dependencies { - implementation(projects.componentConstants) + api(projects.componentConstants) } diff --git a/appinventor/component-constants/build.gradle.kts b/appinventor/component-constants/build.gradle.kts index 8eafd6b414f..fdcef153767 100644 --- a/appinventor/component-constants/build.gradle.kts +++ b/appinventor/component-constants/build.gradle.kts @@ -1,11 +1,12 @@ plugins { `java-library` -// id("org.docstr.gwt") version "1.1.21" + id("org.docstr.gwt") version "1.1.21" // TODO: should apply gwt-base } -//gwt { -// gwtVersion = "2.8.1" -//} +gwt { + gwtVersion = "2.10.0" + modules("com.google.appinventor.common.CommonVersion") +} java { toolchain { @@ -16,7 +17,6 @@ java { dependencies { } -tasks.withType(JavaCompile::class).forEach { - // add utf-8 encoding to all source files - it.options.encoding = "UTF-8" +tasks.withType { + options.encoding = "UTF-8" } \ No newline at end of file diff --git a/appinventor/component-constants/CommonConstants.gwt.xml b/appinventor/component-constants/src/main/resources/com/google/appinventor/components/CommonConstants.gwt.xml similarity index 100% rename from appinventor/component-constants/CommonConstants.gwt.xml rename to appinventor/component-constants/src/main/resources/com/google/appinventor/components/CommonConstants.gwt.xml diff --git a/appinventor/component-scripts/build.gradle.kts b/appinventor/component-scripts/build.gradle.kts index 0b9f0211024..4059b3b9149 100644 --- a/appinventor/component-scripts/build.gradle.kts +++ b/appinventor/component-scripts/build.gradle.kts @@ -2,12 +2,6 @@ plugins { java } -java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(8)) - } -} - dependencies { implementation(projects.commonUtils) implementation(projects.componentConstants) diff --git a/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentProcessor.java b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentProcessor.java index d02cf1220df..8a7d8d6e124 100644 --- a/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentProcessor.java +++ b/appinventor/component-scripts/src/main/java/com/google/appinventor/components/scripts/ComponentProcessor.java @@ -1,2980 +1,2997 @@ -// -*- mode: java; c-basic-offset: 2; -*- -// Copyright 2009-2011 Google, All Rights reserved -// Copyright 2011-2019 MIT, All rights reserved -// Released under the Apache License, Version 2.0 -// http://www.apache.org/licenses/LICENSE-2.0 - -package com.google.appinventor.components.scripts; - -import com.google.appinventor.components.annotations.DesignerComponent; -import com.google.appinventor.components.annotations.DesignerProperty; -import com.google.appinventor.components.annotations.IsColor; -import com.google.appinventor.components.annotations.PropertyCategory; -import com.google.appinventor.components.annotations.SimpleEvent; -import com.google.appinventor.components.annotations.SimpleFunction; -import com.google.appinventor.components.annotations.SimpleObject; -import com.google.appinventor.components.annotations.SimpleProperty; -import com.google.appinventor.components.annotations.SimpleBroadcastReceiver; -import com.google.appinventor.components.annotations.UsesActivityMetadata; -import com.google.appinventor.components.annotations.UsesApplicationMetadata; -import com.google.appinventor.components.annotations.UsesAssets; -import com.google.appinventor.components.annotations.UsesLibraries; -import com.google.appinventor.components.annotations.UsesNativeLibraries; -import com.google.appinventor.components.annotations.UsesPermissions; -import com.google.appinventor.components.annotations.UsesActivities; -import com.google.appinventor.components.annotations.UsesBroadcastReceivers; -import com.google.appinventor.components.annotations.UsesContentProviders; -import com.google.appinventor.components.annotations.UsesQueries; -import com.google.appinventor.components.annotations.UsesServices; -import com.google.appinventor.components.annotations.androidmanifest.ActivityElement; -import com.google.appinventor.components.annotations.androidmanifest.ReceiverElement; -import com.google.appinventor.components.annotations.androidmanifest.IntentFilterElement; -import com.google.appinventor.components.annotations.androidmanifest.MetaDataElement; -import com.google.appinventor.components.annotations.androidmanifest.ActionElement; -import com.google.appinventor.components.annotations.androidmanifest.DataElement; -import com.google.appinventor.components.annotations.androidmanifest.CategoryElement; -import com.google.appinventor.components.annotations.androidmanifest.ServiceElement; -import com.google.appinventor.components.annotations.androidmanifest.ProviderElement; -import com.google.appinventor.components.annotations.androidmanifest.PathPermissionElement; -import com.google.appinventor.components.annotations.androidmanifest.GrantUriPermissionElement; -import com.google.appinventor.components.common.PropertyTypeConstants; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; - -import java.io.IOException; -import java.io.Writer; - -import java.lang.annotation.Annotation; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.SortedMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.annotation.processing.AbstractProcessor; -import javax.annotation.processing.Messager; -import javax.annotation.processing.ProcessingEnvironment; -import javax.annotation.processing.RoundEnvironment; -import javax.lang.model.SourceVersion; -import javax.lang.model.element.AnnotationMirror; -import javax.lang.model.element.AnnotationValue; -import javax.lang.model.element.AnnotationValueVisitor; -import javax.lang.model.element.Element; -import javax.lang.model.element.ElementKind; -import javax.lang.model.element.ExecutableElement; -import javax.lang.model.element.Modifier; -import javax.lang.model.element.PackageElement; -import javax.lang.model.element.TypeElement; -import javax.lang.model.element.VariableElement; -import javax.lang.model.type.ArrayType; -import javax.lang.model.type.DeclaredType; -import javax.lang.model.type.ErrorType; -import javax.lang.model.type.ExecutableType; -import javax.lang.model.type.NoType; -import javax.lang.model.type.NullType; -import javax.lang.model.type.PrimitiveType; -import javax.lang.model.type.TypeKind; -import javax.lang.model.type.TypeMirror; -import javax.lang.model.type.TypeVariable; -import javax.lang.model.type.UnionType; -import javax.lang.model.type.WildcardType; -import javax.lang.model.util.AbstractTypeVisitor7; -import javax.lang.model.util.Elements; -import javax.lang.model.util.SimpleTypeVisitor7; -import javax.lang.model.util.Types; - -import javax.tools.Diagnostic; -import javax.tools.Diagnostic.Kind; -import javax.tools.FileObject; -import javax.tools.StandardLocation; - -/** - * Processor for generating output files based on the annotations and - * javadoc in the component source code. - *

    - * Specifically, this reads over the source files, building up a representation - * of components and their designer properties, properties, methods, and - * events. Concrete subclasses implement the method {@link #outputResults()} - * to generate output. - *

    - * Currently, the following annotations are used: - *

      - *
    • {@link DesignerComponent} and {@link SimpleObject} to identify - * components. Subclasses can distinguish between the two through - * the boolean fields - * {@link ComponentProcessor.ComponentInfo#designerComponent} and - * {@link ComponentProcessor.ComponentInfo#simpleObject}. - *
    • {@link DesignerProperty} to identify designer properties. - *
    • {@link SimpleProperty} to identify properties. - *
    • {@link SimpleFunction} to identify methods. - *
    • {@link SimpleEvent} to identify events. - *
    - * - * @author spertus@google.com (Ellen Spertus) - * - * [lyn, 2015/12/29] Added deprecated instance variable to ParameterizedFeature. - * This is inherited by Event, Method, and Property, which are modified - * slightly to handle it. - * - * [Will, 2016/9/20] Added methods to process annotations in the package - * com.google.appinventor.components.annotations.androidmanifest and the - * appropriate calls in {@link #processComponent(Element)}. - */ -public abstract class ComponentProcessor extends AbstractProcessor { - private static final String OUTPUT_PACKAGE = ""; - - private static final String MISSING_SIMPLE_PROPERTY_ANNOTATION = - "Designer property %s does not have a corresponding @SimpleProperty annotation."; - private static final String BOXED_TYPE_ERROR = - "Found use of boxed type %s. Please use the primitive type %s instead"; - - // Returned by getSupportedAnnotationTypes() - private static final Set SUPPORTED_ANNOTATION_TYPES = ImmutableSet.of( - "com.google.appinventor.components.annotations.DesignerComponent", - "com.google.appinventor.components.annotations.DesignerProperty", - "com.google.appinventor.components.annotations.SimpleEvent", - "com.google.appinventor.components.annotations.SimpleFunction", - "com.google.appinventor.components.annotations.SimpleObject", - "com.google.appinventor.components.annotations.SimpleProperty", - // TODO(Will): Remove the following string once the deprecated - // @SimpleBroadcastReceiver annotation is removed. It should - // should remain for the time being because otherwise we'll break - // extensions currently using @SimpleBroadcastReceiver. - "com.google.appinventor.components.annotations.SimpleBroadcastReceiver", - "com.google.appinventor.components.annotations.UsesAssets", - "com.google.appinventor.components.annotations.UsesLibraries", - "com.google.appinventor.components.annotations.UsesNativeLibraries", - "com.google.appinventor.components.annotations.UsesActivities", - "com.google.appinventor.components.annotations.UsesBroadcastReceivers", - "com.google.appinventor.components.annotations.UsesPermissions", - "com.google.appinventor.components.annotations.UsesQueries", - "com.google.appinventor.components.annotations.UsesServices", - "com.google.appinventor.components.annotations.UsesContentProviders"); - - // Returned by getRwString() - private static final String READ_WRITE = "read-write"; - private static final String READ_ONLY = "read-only"; - private static final String WRITE_ONLY = "write-only"; - - // Must match buildserver.compiler.ARMEABI_V7A_SUFFIX - private static final String ARMEABI_V7A_SUFFIX = "-v7a"; - // Must match buildserver.compiler.ARMEABI_V8A_SUFFIX - private static final String ARM64_V8A_SUFFIX = "-v8a"; - // Must match buildserver.compiler.X86_64_SUFFIX - private static final String X86_64_SUFFIX = "-x8a"; - - private static final String TYPE_PLACEHOLDER = "%type%"; - - private static final Map BOXED_TYPES = new HashMap<>(); - - static { - BOXED_TYPES.put("java.lang.Boolean", "boolean"); - BOXED_TYPES.put("java.lang.Byte", "byte"); - BOXED_TYPES.put("java.lang.Char", "char"); - BOXED_TYPES.put("java.lang.Short", "short"); - BOXED_TYPES.put("java.lang.Integer", "int"); - BOXED_TYPES.put("java.lang.Long", "long"); - BOXED_TYPES.put("java.lang.Float", "float"); - BOXED_TYPES.put("java.lang.Double", "double"); - } - - // The next two fields are set in init(). - /** - * A handle allowing access to facilities provided by the annotation - * processing tool framework - */ - private Elements elementUtils; - private Types typeUtils; - - /** - * Produced through {@link ProcessingEnvironment#getMessager()} and - * used for outputing errors and warnings. - */ - // Set in process() - protected Messager messager; - - /** - * Indicates which pass is being performed by the Java annotation processor - */ - private int pass = 0; - - /** - * Information about every App Inventor component. Keys are fully-qualified names - * (such as "com.google.appinventor.components.runtime.components.android.Label"), and - * values are the corresponding {@link ComponentProcessor.ComponentInfo} objects. - * This is constructed by {@link #process} for use in {@link #outputResults()}. - */ - protected final SortedMap components = Maps.newTreeMap(); - - /** - * Information about every option list helper block. Keys are simple names, and values are the - * corresponding {@link ComponentProcessor.OptionList} objects. This is constructed as a side - * effect of {@link #process} for use in {@link #outputResults()}. - */ - protected final Map optionLists = Maps.newTreeMap(); - - /** - * A list of asset filters, which are in fact lists of strings. This gets intialized with an empty - * filter by the ComponentProcessor constructor. - */ - protected List> filters; - - private final List componentTypes = Lists.newArrayList(); - - /** - * A set of visited types in the class hierarchy. This is used to reduce the complexity of - * detecting whether a class implements {@link com.google.appinventor.components.runtime.Component} - * from O(n^2) to O(n) by tracking visited nodes to prevent repeat explorations of the class tree. - */ - private final Set visitedTypes = new HashSet<>(); - - public ComponentProcessor() { - filters = new ArrayList>(); - filters.add(new ArrayList()); - } - - /** - * Represents a parameter consisting of a name and a type. - */ - protected class Parameter implements Cloneable { - /** - * The parameter name - */ - protected final String name; - - /** - * The parameter's Java type, such as int or java.lang.String. - */ - protected final TypeMirror type; - - /** - * Indicate whether this parameter is an integer that represents a color. - */ - protected final boolean color; - - /** - * The helper key associated with this parameter, if any. - */ - protected HelperKey helper; - - /** - * Constructs a Parameter. - * - * @param name the parameter name - * @param type the parameter's Java type (such as int or java.lang.String) - */ - protected Parameter(String name, TypeMirror type) { - this(name, type, false); - } - - protected Parameter(String name, TypeMirror type, boolean color) { - this.name = name; - this.type = type; - this.color = color; - // helper is null by default. - } - - /** - * Returns the HelperKey associated with this parameter, if one exists. Null otherwise. - * @return the HelperKey associated with this parameter. - */ - protected HelperKey getHelperKey() { - return helper; - } - - /** - * Returns the string representation of the Yail type for this parameter. - * @return the string representation of the Yail type for this parameter. - * @throws RuntimeException if {@code parameter} does not have a - * corresponding Yail type - */ - protected String getYailType() { - return javaTypeToYailType(type); - } - - @Override - public Parameter clone() { - Parameter param = new Parameter(name, type, color); - param.helper = helper; - return param; - } - } - - protected class Continuation extends Parameter { - protected final TypeMirror underlyingType; - - protected Continuation(String name, final TypeMirror type) { - this(name, type, false); - } - - protected Continuation(String name, TypeMirror type, boolean color) { - super(name, type, color); - underlyingType = type.accept(new AbstractTypeVisitor7() { - @Override - public TypeMirror visitPrimitive(PrimitiveType t, Void unused) { - return null; - } - - @Override - public TypeMirror visitNull(NullType t, Void unused) { - return null; - } - - @Override - public TypeMirror visitArray(ArrayType t, Void unused) { - return null; - } - - @Override - public TypeMirror visitDeclared(DeclaredType t, Void unused) { - List arglist = t.getTypeArguments(); - if (arglist.isEmpty()) { - messager.printMessage(Kind.ERROR, "Continuation should be specialized with type.", - t.asElement()); - } - return arglist.get(0); - } - - @Override - public TypeMirror visitError(ErrorType t, Void unused) { - return null; - } - - @Override - public TypeMirror visitTypeVariable(TypeVariable t, Void unused) { - return null; - } - - @Override - public TypeMirror visitWildcard(WildcardType t, Void unused) { - return null; - } - - @Override - public TypeMirror visitExecutable(ExecutableType t, Void unused) { - return null; - } - - @Override - public TypeMirror visitNoType(NoType t, Void unused) { - return null; - } - - @Override - public TypeMirror visitUnion(UnionType t, Void unused) { - return null; - } - }, null); - } - - protected String getContinuationType() { - return javaTypeToYailType(underlyingType, true); - } - } - - /** - * Represents a component feature that has a name and a description. - */ - protected abstract static class Feature { - private static final Pattern AT_SIGN = Pattern.compile("[^\\\\]@"); - private static final Pattern LINK_FORM = Pattern.compile("\\{@link ([A-Za-z]*#?)([A-Za-z]*)[^}]*}"); - private static final Pattern CODE_FORM = Pattern.compile("\\{@code ([^}]*)}"); - - private final String featureType; - protected final String name; - protected String description; - protected boolean defaultDescription = false; - protected String longDescription; - protected boolean userVisible; - protected boolean deprecated; - - protected Feature(String name, String description, String longDescription, String featureType, - boolean userVisible, boolean deprecated) { - this.featureType = featureType; - this.name = name; - setDescription(description); - setLongDescription(longDescription); - this.userVisible = userVisible; - this.deprecated = deprecated; - } - - public boolean isDefaultDescription() { - return defaultDescription; - } - - public void setDescription(String description) { - if (description == null || description.isEmpty()) { - this.description = featureType + " for " + name; - defaultDescription = true; - } else { - // Throw out the first @ or { and everything after it, - // in order to strip out @param, @author, {@link ...}, etc. - this.description = description.split("@|\\{@")[0].trim(); - this.description = removeMarkup(this.description); - defaultDescription = false; - } - } - private String removeMarkup(String str) { - String result = str.replaceAll("\\\\(.)", "$1"); - result = result.replaceAll("\\[([a-zA-Z0-9]*)\\]\\(#.*\\)", "$1"); - return result; - } - public void setLongDescription(String longDescription) { - if (longDescription == null || longDescription.isEmpty()) { - this.longDescription = this.description; - } else if (longDescription.contains("@suppressdoc")) { - this.longDescription = ""; - } else { - this.longDescription = longDescription; - } - // Handle links - Matcher linkMatcher = LINK_FORM.matcher(this.longDescription); - StringBuffer sb = new StringBuffer(); - int lastEnd = 0; - while (linkMatcher.find(lastEnd)) { - sb.append(this.longDescription, lastEnd, linkMatcher.start()); - String clazz = linkMatcher.group(1); - if (clazz.endsWith("#")) { - clazz = clazz.substring(0, clazz.length() - 1); - } - if ("Form".equals(clazz)) { - clazz = "Screen"; - } - String func = linkMatcher.group(2); - sb.append("["); - if (!clazz.isEmpty()) { - sb.append("`"); - sb.append(clazz); - sb.append("`"); - if (!func.isEmpty()) { - sb.append("'s "); - } - } - if (!func.isEmpty()) { - sb.append("`"); - sb.append(func); - sb.append("`"); - } - sb.append("](#"); - if (clazz.isEmpty()) { - sb.append("%type%."); - } else { - sb.append(clazz); - if (!func.isEmpty()) { - sb.append("."); - } - } - if (!func.isEmpty()) { - sb.append(func); - } - sb.append(")"); - lastEnd = linkMatcher.end(); - } - sb.append(this.longDescription.substring(lastEnd)); - this.longDescription = sb.toString(); - // Map {@code foo} to `foo` - sb = new StringBuffer(); - Matcher codeMatcher = CODE_FORM.matcher(this.longDescription); - lastEnd = 0; - while (codeMatcher.find(lastEnd)) { - sb.append(this.longDescription, lastEnd, codeMatcher.start()); - sb.append("`"); - sb.append(codeMatcher.group(1)); - sb.append("`"); - lastEnd = codeMatcher.end(); - } - sb.append(this.longDescription.substring(lastEnd)); - this.longDescription = sb.toString(); - // Strip out the Javadoc annotations (@param, etc.) for end-user documentation - Matcher m = AT_SIGN.matcher(this.longDescription); - if (m.find()) { - this.longDescription = this.longDescription.substring(0, m.start() + 1); - } - // Replace escaped @ with just @, e.g., so we can use @ in email address examples. - this.longDescription = this.longDescription.replaceAll("\\\\@", "@").trim(); - } - - public String getLongDescription(ComponentInfo component) { - if (longDescription == null || longDescription.isEmpty()) { - return description; - } - String name = component.name.equals("Form") ? "Screen" : component.name; - return longDescription.replaceAll("%type%", name).trim(); - } - - /** - * Returns whether this property is visible in the Blocks Editor, as retrieved - * from {@link SimpleProperty#userVisible()}. - * - * @return whether the property is visible in the Blocks Editor - */ - protected boolean isUserVisible() { - return userVisible; - } - - /** - * Returns whether this property is deprecated in the Blocks Editor. - * - * @return whether the property is visible in the Blocks Editor - */ - protected boolean isDeprecated() { - return deprecated; - } - } - - /** - * Represents a component feature that has a name, description, and - * parameters. - */ - protected abstract class ParameterizedFeature extends Feature { - // Inherits name, description - protected final List parameters; - - protected ParameterizedFeature(String name, String description, String longDescription, - String feature, boolean userVisible, boolean deprecated) { - super(name, description, longDescription, feature, userVisible, deprecated); - parameters = Lists.newArrayList(); - } - - /** - * Adds the given parameter to this ParameterizedFeature. - * @param param The parameter to add to this ParameterizedFeature. - */ - protected void addParameter(Parameter param) { - parameters.add(param); - } - - /** - * Generates a comma-separated string corresponding to the parameter list, - * using Yail types (e.g., "number n, text t1"). - * - * @return a string representation of the parameter list - * @throws RuntimeException if the parameter type cannot be mapped to any - * of the legal return values - */ - protected String toParameterString() { - StringBuilder sb = new StringBuilder(); - int count = 0; - for (Parameter param : parameters) { - sb.append(param.getYailType()); - sb.append(" "); - sb.append(param.name); - if (++count != parameters.size()) { - sb.append(", "); - } - } - return new String(sb); - } - } - - /** - * Represents an App Inventor event (annotated with {@link SimpleEvent}). - */ - protected final class Event extends ParameterizedFeature - implements Cloneable, Comparable { - // Inherits name, description, and parameters - - protected Event(String name, String description, String longDescription, boolean userVisible, boolean deprecated) { - super(name, description, longDescription, "Event", userVisible, deprecated); - } - - @Override - public Event clone() { - Event that = new Event(name, description, longDescription, userVisible, deprecated); - for (Parameter p : parameters) { - that.addParameter(p.clone()); - } - return that; - } - - @Override - public int compareTo(Event e) { - return name.compareTo(e.name); - } - } - - /** - * Represents an App Inventor component method (annotated with - * {@link SimpleFunction}). - */ - protected final class Method extends ParameterizedFeature - implements Cloneable, Comparable { - /** - * The method's Java return type. Null if the method is a void method. - */ - private TypeMirror returnType; - /** - * The helper key associated with this method's return type. - */ - private HelperKey returnHelperKey; - /** - * Indicate whether this method's return type an integer that represents a - * color. - */ - private boolean color; - - /** - * Indicate whether the method's return should be re-written into a continuation. - */ - private boolean continuation; - - protected Method(String name, String description, String longDescription, boolean userVisible, - boolean deprecated) { - super(name, description, longDescription, "Method", userVisible, deprecated); - } - - /** - * Returns the string representation of this method's Java return type, or null of this method - * is a void method. - */ - protected String getReturnType() { - if (returnType != null) { - return returnType.toString(); - } - return null; - } - - /** - * Returns this method's Yail return type (e.g., "number", "text", "list", etc). - * @return the method's Yail return type. - */ - protected String getYailReturnType() { - return javaTypeToYailType(returnType, continuation); - } - - /** - * Returns the HelperKey associated with the return type of this method, if one exists. Null - * otherwise. - * - * @return the helper key associated with the return type of this method. - */ - protected HelperKey getReturnHelperKey() { - return returnHelperKey; - } - - /** - * Returns true if this method's return type is an integer which represents a color. - * - * @return true if this method's return type is an integer which represents a color. - */ - protected boolean isColor() { - return color; - } - - protected boolean isContinuation() { - return continuation; - } - - @Override - public Method clone() { - Method that = new Method(name, description, longDescription, userVisible, deprecated); - for (Parameter p : parameters) { - that.addParameter(p.clone()); - } - that.returnType = returnType; - that.returnHelperKey = returnHelperKey; - return that; - } - - @Override - public int compareTo(Method f) { - return name.compareTo(f.name); - } - } - - /** - * Represents an App Inventor component property (annotated with - * {@link SimpleProperty}). - */ - protected final class Property extends Feature implements Cloneable { - protected final String name; - private PropertyCategory propertyCategory; - private TypeMirror type; - private boolean readable; - private boolean writable; - private String componentInfoName; - private boolean color; - private HelperKey helper; - - protected Property(String name, String description, String longDescription, - PropertyCategory category, boolean userVisible, boolean deprecated) { - super(name, description, longDescription, "Property", userVisible, deprecated); - this.propertyCategory = category; - this.name = name; - // All other properties can be left as their defaults. - } - - @Override - public Property clone() { - Property that = new Property(name, description, longDescription, propertyCategory, - isUserVisible(), isDeprecated()); - that.type = type; - that.readable = readable; - that.writable = writable; - that.componentInfoName = componentInfoName; - that.color = color; - that.helper = helper; - return that; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(""); - return sb.toString(); - } - - /** - * Returns the description of this property, as retrieved by - * {@link SimpleProperty#description()}. - * - * @return the description of this property - */ - protected String getDescription() { - return description; - } - - /** - * Returns the string representaiton of this property's java type. - * - * @return the string representaiton of this property's java type. - */ - protected String getType() { - // Type should always be non-null. - return type.toString(); - } - - /** - * Returns this property's Yail type (e.g., "number", "text", "list", etc). - * - * @return this property's Yail type (e.g., "number", "text", "list", etc). - */ - protected String getYailType() { - return javaTypeToYailType(type); - } - - /** - * Returns whether this property is readable (has a getter). - * - * @return whether this property is readable - */ - protected boolean isReadable() { - return readable; - } - - /** - * Returns whether this property is writable (has a setter). - * - * @return whether this property is writable - */ - protected boolean isWritable() { - return writable; - } - - protected boolean isColor() { - return color; - } - - /** - * Returns the HelperKey associated with this property, if one exists. Null otherwise. - * @return the HelperKey associated with this property, if one exists. - */ - protected HelperKey getHelperKey() { - return helper; - } - - /** - * Returns a string indicating whether this property is readable and/or - * writable. - * - * @return one of "read-write", "read-only", or "write-only" - * @throws {@link RuntimeException} if the property is neither readable nor - * writable - */ - protected String getRwString() { - if (readable) { - if (writable) { - return READ_WRITE; - } else { - return READ_ONLY; - } - } else { - if (!writable) { - throw new RuntimeException("Property " + name + - " is neither readable nor writable"); - } - return WRITE_ONLY; - } - } - } - - /** - * An enum specifying the available types of helper blocks aka types of helper UI. - * Currently the only type of helper UI is an OPTION_LIST which defines a dropdown UI in the - * blocks editor. This is associated with the OptionList data type, ie OptionList data always has - * an OPTION_LIST style UI in the blocks editor (as of now). - */ - protected enum HelperType { OPTION_LIST, ASSET } - - /** - * A key that allows you to access info about a helper block. - * - *

    This class could be generic, and we could use subtyping to define the different HelperTypes - * but I (Beka) think it makes more sense to make this closely match the JavaScript - * implementation. - */ - protected static final class HelperKey { - private final HelperType helperType; - - private final Object key; - - /** - * Creates a HelperKey which can be used to access data about a helper block. - */ - protected HelperKey(HelperType type, Object key) { - this.helperType = type; - this.key = key; - } - - /** - * Returns the type of helper block, aka the type of helper UI. Eg an option list. - * @return the type of helper block. - */ - protected HelperType getType() { - return helperType; - } - - /** - * Returns the key to the specific helper data. Eg in the case of an option list helper, this - * key could be used to look up values in the optionLists Map. - * If the helper block doesn't need any special data, this can just return null. - * @return key to the helper data. - */ - protected Object getKey() { - return key; - } - } - - - /** - * Represents a list of Options associated with some (enum) class. The data in this OptionList - * is used to create OptionList helper blocks. - * - *

    Here JSON-ified example of such data, in this case we are looking at the Direction enum with - * a default value of East. - * { - * "className": "com.google.appinventor.components.common.Direction", - * "key": "Direction", - * "tag": "Direction", - * "defaultOpt": "East", - * "underlyingType": "java.lang.Integer", - * "options": [ - * { "name": "North", "value": "1", "description": "Option for North", - * "deprecated": "false" }, - * { "name": "Northeast", "value": "2", "description": "Option for Northeast", - * "deprecated": "false" }, - * { "name": "East", "value": "3", "description": "Option for East", - * "deprecated": "false" }, - * { "name": "Southeast", "value": "4", "description": "Option for Southeast", - * "deprecated": "false" }, - * { "name": "South", "value": "-1", "description": "Option for South", - * "deprecated": "false" }, - * { "name": "Southwest", "value": "-2", "description": "Option for Southwest", - * "deprecated": "false" }, - * { "name": "West", "value": "-3", "description": "Option for West", - * "deprecated": "false" }, - * { "name": "Northwest", "value": "-4", "description": "Option for Northwest", - * "deprecated": "false" } - ] - * } - */ - protected final class OptionList { - /** - * A list of option values (Strings) and option info (Options). - * For built-in components the Option name is used to look up the translated display text. - * For extensions, which do not support i18n, the Option name /is/ the display text. - */ - private final ArrayList

      - *
    1. {@link DesignerComponent#designerHelpDescription()}
    2. - *
    3. {@link DesignerComponent#description()}
    4. - *
    5. the Javadoc preceding the beginning of the class corresponding to the component
    6. - *
    - */ - protected String getHelpDescription() { - return helpDescription; - } - - /** - * Custom help URL to documentation for a component (typically an extension) - * - * @return the custom help URL, if any, for the component - */ - protected String getHelpUrl() { - return helpUrl; - } - - /** - * Returns the name of this component's category within the Designer, as displayed - * (for example, "Screen Arrangement"). - * - * @return the name of this component's Designer category - */ - protected String getCategory() { - return category; - } - - /** - * Returns the String representation of the EnumConstant corresponding to this - * component's category within the Designer (for example, "ARRANGEMENTS"). - * Usually, you should use {@link #getCategory()} instead. - * - * @return the EnumConstant representing this component's Designer category - */ - protected String getCategoryString() { - return categoryString; - } - - /** - * Returns the version number of this component, as specified by - * {@link DesignerComponent#version()}. - * - * @return the version number of this component - */ - protected int getVersion() { - return version; - } - - /** - * Returns whether this component is shown on the palette in the Designer, as - * specified by {@link DesignerComponent#showOnPalette()}. - * - * @return whether this component is shown on the Designer palette - */ - protected boolean getShowOnPalette() { - return showOnPalette; - } - - /** - * Returns whether this component is non-visible on the device's screen, as - * specified by {@link DesignerComponent#nonVisible()}. Examples of non-visible - * components are {@link com.google.appinventor.components.runtime.LocationSensor} - * and {@link com.google.appinventor.components.runtime.Clock}. - * - * @return {@code true} if the component is non-visible, {@code false} otherwise - */ - protected boolean getNonVisible() { - return nonVisible; - } - - /** - * Returns whether this component is an external component or not. - * - * @return true if the component is external. false otherwise. - */ - protected boolean getExternal() { - return external; - } - - /** - * Returns the name of the icon file used on the Designer palette, as specified in - * {@link DesignerComponent#iconName()}. - * - * @return the name of the icon file - */ - protected String getIconName() { - return iconName; - } - - /** - * Returns the minimum Android SDK required for the component to run, as specified in - * {@link DesignerComponent#androidMinSdk()}. - * - * @return the minimum Android sdk for the component - */ - protected int getAndroidMinSdk() { - return androidMinSdk; - } - - protected String getVersionName() { - return versionName; - } - - protected String getDateBuilt() { - return dateBuilt; - } - - /** - * Returns the name of the license file used by external components - * {@link DesignerComponent#licenseName()}. - * - * @return the name of the license file - */ - protected String getLicenseName() { - return licenseName; - } - - private String getDisplayNameForComponentType(String componentTypeName) { - // Users don't know what a 'Form' is. They know it as a 'Screen'. - return "Form".equals(componentTypeName) ? "Screen" : componentTypeName; - } - - protected String getName() { - if (name.equals("Form")) { - return "Screen"; - } else { - return name; - } - } - - } - - /** - * Returns the annotations supported by this {@code ComponentProcessor}, namely those related - * to components ({@link com.google.appinventor.components.annotations}). - * - * @return the supported annotations - */ - @Override - public Set getSupportedAnnotationTypes() { - return SUPPORTED_ANNOTATION_TYPES; - } - - @Override - public SourceVersion getSupportedSourceVersion() { - return SourceVersion.RELEASE_7; - } - - @Override - public void init(ProcessingEnvironment processingEnv) { - super.init(processingEnv); - elementUtils = processingEnv.getElementUtils(); - typeUtils = processingEnv.getTypeUtils(); - } - - /** - * Processes the component-related annotations ({@link - * com.google.appinventor.components.annotations}), - * populating {@link #components} and initializing {@link #messager} for use within - * {@link #outputResults()}, which is called at the end of this method and must be overriden by - * concrete subclasses. - * - * @param annotations the annotation types requested to be processed - * @param roundEnv environment for information about the current and prior round - * @return {@code true}, indicating that the annotations have been claimed by this processor. - * @see AbstractProcessor#process - */ - @Override - public boolean process(Set annotations, RoundEnvironment roundEnv) { - // This method will be called many times for the source code. - // Only do something on the first pass. - pass++; - if (pass > 1) { - return true; - } - - messager = processingEnv.getMessager(); - - List elements = new ArrayList<>(); - List excludedElements = new ArrayList<>(); - for (TypeElement te : annotations) { - if (te.getSimpleName().toString().equals("DesignerComponent")) { - elements.addAll(roundEnv.getElementsAnnotatedWith(te)); - } else if (te.getSimpleName().toString().equals("SimpleObject")) { - for (Element element : roundEnv.getElementsAnnotatedWith(te)) { - SimpleObject annotation = element.getAnnotation(SimpleObject.class); - if (!annotation.external()) { - elements.add(element); - } else { - excludedElements.add(element); - } - } - } - } - for (Element element : elements) { - processComponent(element); - } - - // Put the component class names (including abstract classes) - componentTypes.addAll(components.keySet()); - for (Element element : excludedElements) { - componentTypes.add(element.asType().toString()); // allow extensions to reference one another - } - - // Remove non-components before calling outputResults. - List removeList = Lists.newArrayList(); - for (Map.Entry entry : components.entrySet()) { - ComponentInfo component = entry.getValue(); - if (component.abstractClass || !component.designerComponent) { - removeList.add(entry.getKey()); - } - } - components.keySet().removeAll(removeList); - - try { - // This is an abstract method implemented in concrete subclasses. - outputResults(); - } catch (IOException e) { - throw new RuntimeException(e); - } - - // We need to return false here so that sibling annotation processors can run - return false; - } - - /* - * This processes an element if it represents a component, reading in its - * information and adding it to components. If this component is a - * subclass of another component, this method recursively calls itself on the - * superclass. - */ - private void processComponent(Element element) { - boolean isForDesigner = element.getAnnotation(DesignerComponent.class) != null; - // If the element is not a component (e.g., Float), return early. - if (element.getAnnotation(SimpleObject.class) == null && !isForDesigner) { - return; - } - - // If we already processed this component, return early. - String longComponentName = ((TypeElement) element).getQualifiedName().toString(); - if (components.containsKey(longComponentName)) { - return; - } - - // Create new ComponentInfo. - ComponentInfo componentInfo = new ComponentInfo(element); - - // Check if this extends another component (DesignerComponent or SimpleObject). - List directSupertypes = typeUtils.directSupertypes(element.asType()); - if (!directSupertypes.isEmpty()) { - // Only look at the first one. Later ones would be interfaces, - // which we don't care about. - String parentName = directSupertypes.get(0).toString(); - Element e = ((DeclaredType) directSupertypes.get(0)).asElement(); - parentName = ((TypeElement) e).getQualifiedName().toString(); - ComponentInfo parentComponent = components.get(parentName); - if (parentComponent == null) { - // Try to process the parent component now. - Element parentElement = elementUtils.getTypeElement(parentName); - if (parentElement != null) { - processComponent(parentElement); - parentComponent = components.get(parentName); - } - } - - // If we still can't find the parent class, we don't care about it, since it's not a - // component (but something like java.lang.Object). Otherwise, we need to copy its - // build info, designer properties, properties, methods, and events. - if (parentComponent != null) { - // Copy its build info, designer properties, properties, methods, and events. - componentInfo.permissions.addAll(parentComponent.permissions); - componentInfo.libraries.addAll(parentComponent.libraries); - componentInfo.nativeLibraries.addAll(parentComponent.nativeLibraries); - componentInfo.assets.addAll(parentComponent.assets); - componentInfo.activities.addAll(parentComponent.activities); - componentInfo.metadata.addAll(parentComponent.metadata); - componentInfo.activityMetadata.addAll(parentComponent.activityMetadata); - componentInfo.broadcastReceivers.addAll(parentComponent.broadcastReceivers); - componentInfo.queries.addAll(parentComponent.queries); - componentInfo.services.addAll(parentComponent.services); - componentInfo.contentProviders.addAll(parentComponent.contentProviders); - // TODO(Will): Remove the following call once the deprecated - // @SimpleBroadcastReceiver annotation is removed. It should - // should remain for the time being because otherwise we'll break - // extensions currently using @SimpleBroadcastReceiver. - componentInfo.classNameAndActionsBR.addAll(parentComponent.classNameAndActionsBR); - // Since we don't modify DesignerProperties, we can just call Map.putAll to copy the - // designer properties from parentComponent to componentInfo. - componentInfo.designerProperties.putAll(parentComponent.designerProperties); - // NOTE(lizlooney) We can't just call Map.putAll to copy the events/properties/methods from - // parentComponent to componentInfo because then each component will share a single - // Event/Property/Method and if one component overrides something about an - // Event/Property/Method, then it will affect all the other components that are sharing - // that Event/Property/Method. - for (Map.Entry entry : parentComponent.events.entrySet()) { - componentInfo.events.put(entry.getKey(), entry.getValue().clone()); - } - for (Map.Entry entry : parentComponent.properties.entrySet()) { - componentInfo.properties.put(entry.getKey(), entry.getValue().clone()); - } - for (Map.Entry entry : parentComponent.methods.entrySet()) { - componentInfo.methods.put(entry.getKey(), entry.getValue().clone()); - } - } - } - - // Gather permissions. - UsesPermissions usesPermissions = element.getAnnotation(UsesPermissions.class); - if (usesPermissions != null) { - for (String permission : usesPermissions.permissionNames().split(",")) { - updateWithNonEmptyValue(componentInfo.permissions, permission); - } - Collections.addAll(componentInfo.permissions, usesPermissions.value()); - } - - // Gather library names. - UsesLibraries usesLibraries = element.getAnnotation(UsesLibraries.class); - if (usesLibraries != null) { - for (String library : usesLibraries.libraries().split(",")) { - updateWithNonEmptyValue(componentInfo.libraries, library); - } - Collections.addAll(componentInfo.libraries, usesLibraries.value()); - } - - // Gather native library names. - UsesNativeLibraries usesNativeLibraries = element.getAnnotation(UsesNativeLibraries.class); - if (usesNativeLibraries != null) { - for (String nativeLibrary : usesNativeLibraries.libraries().split(",")) { - updateWithNonEmptyValue(componentInfo.nativeLibraries, nativeLibrary); - } - for (String v7aLibrary : usesNativeLibraries.v7aLibraries().split(",")) { - updateWithNonEmptyValue(componentInfo.nativeLibraries, v7aLibrary.trim() + ARMEABI_V7A_SUFFIX); - } - for (String v8aLibrary : usesNativeLibraries.v8aLibraries().split(",")) { - updateWithNonEmptyValue(componentInfo.nativeLibraries, v8aLibrary.trim() + ARM64_V8A_SUFFIX); - } - for (String x8664Library : usesNativeLibraries.x86_64Libraries().split(",")) { - updateWithNonEmptyValue(componentInfo.nativeLibraries, x8664Library.trim() + X86_64_SUFFIX); - } - - } - - // Gather required files. - UsesAssets usesAssets = element.getAnnotation(UsesAssets.class); - if (usesAssets != null) { - for (String file : usesAssets.fileNames().split(",")) { - updateWithNonEmptyValue(componentInfo.assets, file); - } - } - - // Gather the required activities and build their element strings. - UsesActivities usesActivities = element.getAnnotation(UsesActivities.class); - if (usesActivities != null) { - try { - for (ActivityElement ae : usesActivities.activities()) { - updateWithNonEmptyValue(componentInfo.activities, activityElementToString(ae)); - } - } catch (IllegalAccessException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + - "activity attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + - "activity attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } - } - - // Gather the required metadata and build their element strings. - UsesApplicationMetadata usesApplicationMetadata = element.getAnnotation(UsesApplicationMetadata.class); - if (usesApplicationMetadata != null) { - try { - for (MetaDataElement me : usesApplicationMetadata.metaDataElements()) { - updateWithNonEmptyValue(componentInfo.metadata, metaDataElementToString(me)); - } - } catch (IllegalAccessException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + - "application metadata and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + - "application metadata and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } - } - - // Gather the required activity metadata and build their element strings. - UsesActivityMetadata usesActivityMetadata = element.getAnnotation(UsesActivityMetadata.class); - if (usesActivityMetadata != null) { - try { - for (MetaDataElement me : usesActivityMetadata.metaDataElements()) { - updateWithNonEmptyValue(componentInfo.activityMetadata, metaDataElementToString(me)); - } - } catch (IllegalAccessException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + - "application metadata and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + - "application metadata and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } - } - - // Gather the required broadcast receivers and build their element strings. - UsesBroadcastReceivers usesBroadcastReceivers = element.getAnnotation(UsesBroadcastReceivers.class); - if (usesBroadcastReceivers != null) { - try { - for (ReceiverElement re : usesBroadcastReceivers.receivers()) { - updateWithNonEmptyValue(componentInfo.broadcastReceivers, receiverElementToString(re)); - } - } catch (IllegalAccessException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + - "broadcast receiver attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + - "broadcast receiver attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } - } - - // Gather the required queries and build their element strings. - UsesQueries usesQueries = element.getAnnotation(UsesQueries.class); - if (usesQueries != null) { - try { - for (String packageName : usesQueries.packageNames()) { - componentInfo.queries.add(""); - } - for (IntentFilterElement intent : usesQueries.intents()) { - updateWithNonEmptyValue(componentInfo.queries, intentFilterElementToIntentString(intent)); - } - for (ProviderElement provider : usesQueries.providers()) { - updateWithNonEmptyValue(componentInfo.queries, providerElementToString(provider)); - } - } catch (IllegalAccessException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " - + "service attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " - + "service attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } - } - - // Gather the required services and build their element strings. - UsesServices usesServices = element.getAnnotation(UsesServices.class); - if (usesServices != null) { - try { - for (ServiceElement se : usesServices.services()) { - updateWithNonEmptyValue(componentInfo.services, serviceElementToString(se)); - } - } catch (IllegalAccessException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + - "service attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + - "service attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } - } - - // Gather the required content providers and build their element strings. - UsesContentProviders usesContentProviders = element.getAnnotation(UsesContentProviders.class); - if (usesContentProviders != null) { - try { - for (ProviderElement pe : usesContentProviders.providers()) { - updateWithNonEmptyValue(componentInfo.contentProviders, providerElementToString(pe)); - } - } catch (IllegalAccessException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + - "provider attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + - "provider attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } - } - - // TODO(Will): Remove the following legacy code once the deprecated - // @SimpleBroadcastReceiver annotation is removed. It should - // should remain for the time being because otherwise we'll break - // extensions currently using @SimpleBroadcastReceiver. - // - // Gather required actions for legacy Broadcast Receivers. The annotation - // has a Class Name and zero or more Filter Actions. In the - // resulting String, Class name will go first, and each Action - // will be added, separated by a comma. - - SimpleBroadcastReceiver simpleBroadcastReceiver = element.getAnnotation(SimpleBroadcastReceiver.class); - if (simpleBroadcastReceiver != null) { - for (String className : simpleBroadcastReceiver.className().split(",")){ - StringBuffer nameAndActions = new StringBuffer(); - nameAndActions.append(className.trim()); - for (String action : simpleBroadcastReceiver.actions().split(",")) { - nameAndActions.append("," + action.trim()); - } - componentInfo.classNameAndActionsBR.add(nameAndActions.toString()); - break; // We only need one class name; If more than one is passed, ignore all but first. - } - } - - // Build up event information. - processEvents(componentInfo, element); - - // Build up property information. - processProperties(componentInfo, element); - - // Build up method information. - processMethods(componentInfo, element); - - if (isForDesigner) { - processDescriptions(componentInfo); - } - - // Add it to our components map. - components.put(longComponentName, componentInfo); - } - - private void processDescriptions(ComponentInfo info) { - final String name = info.displayName; - info.description = info.description.replaceAll(TYPE_PLACEHOLDER, name); - info.helpUrl = info.helpUrl.replaceAll(TYPE_PLACEHOLDER, name); - for (Property property : info.properties.values()) { - property.description = property.description.replaceAll(TYPE_PLACEHOLDER, name); - } - for (Event event : info.events.values()) { - event.description = event.description.replaceAll(TYPE_PLACEHOLDER, name); - } - for (Method method : info.methods.values()) { - method.description = method.description.replaceAll(TYPE_PLACEHOLDER, name); - } - } - - private boolean isPublicMethod(Element element) { - return element.getModifiers().contains(Modifier.PUBLIC) - && element.getKind() == ElementKind.METHOD; - } - - private Property executableElementToProperty(Element element, String componentInfoName) { - String propertyName = element.getSimpleName().toString(); - SimpleProperty simpleProperty = element.getAnnotation(SimpleProperty.class); - - if (!(element.asType() instanceof ExecutableType)) { - throw new RuntimeException("element.asType() is not an ExecutableType for " + - propertyName); - } - - // Use Javadoc for property unless description is set to a non-empty string. - String description = elementUtils.getDocComment(element); - String longDescription = description; - if (!simpleProperty.description().isEmpty()) { - description = simpleProperty.description(); - } - if (description == null) { - description = ""; - } - // Read only until the first javadoc parameter - description = description.split("[^\\\\][@{]")[0].trim(); - - Property property = new Property(propertyName, - description, - longDescription, - simpleProperty.category(), - simpleProperty.userVisible(), - elementUtils.isDeprecated(element)); - - // Get parameters to tell if this is a getter or setter. - ExecutableType executableType = (ExecutableType) element.asType(); - List parameters = executableType.getParameterTypes(); - - // Check if it is a setter or getter, and set the property's readable, writable, - // and type fields appropriately. - TypeMirror typeMirror; - if (parameters.size() == 0) { - // It is a getter. - property.readable = true; - typeMirror = executableType.getReturnType(); - if (typeMirror.getKind().equals(TypeKind.VOID)) { - throw new RuntimeException("Property method is void and has no parameters: " - + propertyName); - } - property.helper = elementToHelperKey(element, ((ExecutableElement)element).getReturnType()); - if (element.getAnnotation(IsColor.class) != null) { - property.color = true; - } - } else { - // It is a setter. - property.writable = true; - if (parameters.size() != 1) { - throw new RuntimeException("Too many parameters for setter for " + - propertyName); - } - typeMirror = parameters.get(0); - Element param = ((ExecutableElement) element).getParameters().get(0); - property.helper = elementToHelperKey(param, param.asType()); - for (VariableElement ve : ((ExecutableElement) element).getParameters()) { - if (ve.getAnnotation(IsColor.class) != null) { - property.color = true; - } - } - } - - // Use typeMirror to set the property's type. - if (!typeMirror.getKind().equals(TypeKind.VOID)) { - property.type = typeMirror; - updateComponentTypes(typeMirror); - } - - property.componentInfoName = componentInfoName; - - return property; - } - - /** - * Converts an element representing a function (for return types) or a parameter into a HelperKey. - * - * @param elem the Element which represents a function (for return types) or a parameter. - * @param type the TypeMirror representing the type of that element. - * @return The created HelperKey if the element does indeed define a helper, null otherwise. - */ - private HelperKey elementToHelperKey(Element elem, TypeMirror type) { - HelperKey key; - key = hasOptionListHelper(elem, type); - if (key != null) { - return key; - } - key = hasAssetsHelper(elem, type); - if (key != null) { - return key; - } - // Add more possibilities here. - return null; - } - - /** - * Returns the associated helper key if the element has an OptionList associated with it. - * Null otherwise. - * - * @param elem the Element which represents a function (for return types) or a parameter. - * @param type the TypeMirror representing the type of that element. - * @return the associated helper key if the element has an OptionList assciated with it. - */ - private HelperKey hasOptionListHelper(Element elem, TypeMirror type) { - // Check if the elem type is an OptionList - if (isOptionList(type)) { - return optionListToHelperKey(((DeclaredType) type).asElement()); - } - - // Check if the elem has an @Options annotation. - // This is the backwards compat method for getting OptionLists. - for (AnnotationMirror mirror : elem.getAnnotationMirrors()) { - // Make sure we are dealing with an Options annotation. - if (!mirror.getAnnotationType().asElement().getSimpleName().contentEquals("Options")) { - continue; - } - for (Entry entry: - mirror.getElementValues().entrySet()) { - // Make sure we are looking at the value argument. - if (!entry.getKey().getSimpleName().contentEquals("value")) { - continue; - } - // Get the AnnotationValue's value. So we are now looking at the - // class passed to the @Options annotation. - Element optionList = ((DeclaredType)entry.getValue().getValue()).asElement(); - return optionListToHelperKey(optionList); - } - } - return null; - } - - /** - * Returns true if the given type implements OptionList. False otherwise. - * @param type the type to check if it implements OptionList. - * @return true if the given type implements OptionList. False otherwise. - */ - private boolean isOptionList(TypeMirror type) { - if (type.getKind() == TypeKind.DECLARED) { - TypeElement elem = (TypeElement)((DeclaredType)type).asElement(); - for (TypeMirror parent : elem.getInterfaces()) { - TypeElement parentElem = (TypeElement)((DeclaredType)parent).asElement(); - if (parentElem.getSimpleName().toString().equals("OptionList")) { - return true; - } - } - } - return false; - } - - /** - * Returns the OptionList HelperKey associated with the given element. - * @param optionList the Element describing a class which implements the OptionList interface. - * @return the HelperKey associated with the given element. - */ - private HelperKey optionListToHelperKey(Element optionList) { - String name = optionList.getSimpleName().toString(); - // We haven't seen this type of option list before, so add it. - if (optionLists.get(name) == null) { - if (!tryAddOptionList(optionList)) { - // Couldn't add it for whatever reason. - return null; - } - } - // This helper key is storing info about an OptionList. - return new HelperKey(HelperType.OPTION_LIST, name); - } - - /** - * Adds a new OptionList (based on the passed option list element) to the optionLists list. - * - * @param optionElem The element representing the enum defining the options. - * @return Returns true if the Optionlist was successfully added. False otherwise. - */ - private boolean tryAddOptionList(Element optionElem) { - String className = optionElem.asType().toString(); - String tagName = optionElem.getSimpleName().toString(); - OptionList optionList = new OptionList(className, tagName); - - // Get the class. - Class clazz; - try { - clazz = Class.forName(className); - } catch (ClassNotFoundException e) { - throw new IllegalArgumentException("OptionList Class: " + className + " is not available. " - + "Make sure that it is available to the compiler."); - } - - // Get the getValue method. - java.lang.reflect.Method toValueMethod; - try { - toValueMethod = clazz.getDeclaredMethod("toUnderlyingValue"); - } catch (NoSuchMethodException e) { - throw new IllegalArgumentException("Class: " + className + " must have a toUnderlyingValue() " - + "method."); - } - - // Get the "fromUnderlyingValue" static method if this class falls under the "com.google.appinventor.components" - // package. We don't use this method here, but we require the built-in helpers to have it for providing backward - // compatibility. - final PackageElement packageElem = processingEnv.getElementUtils().getPackageOf(optionElem); - if (packageElem.getQualifiedName().toString().startsWith("com.google.appinventor.components.")) { - java.lang.reflect.Method fromValueMethod; - Type genericType = null; - try { - ParameterizedType optionListType = (ParameterizedType) clazz.getGenericInterfaces()[0]; - genericType = optionListType.getActualTypeArguments()[0]; - Class typeClass = (Class) genericType; - fromValueMethod = clazz.getDeclaredMethod("fromUnderlyingValue", typeClass); - } catch (NoSuchMethodException e) { - throw new IllegalArgumentException("Class: " + className + " must have a static " - + "fromUnderlyingValue(" + genericType.getTypeName() + ") method."); - } - if (!java.lang.reflect.Modifier.isStatic(fromValueMethod.getModifiers())) { - throw new IllegalArgumentException("Class: " + className + " must have a static " - + "fromUnderlyingValue(" + genericType.getTypeName() + ") method."); - } - } - - // Create a map of enum const names -> values. This is used to filter the below elements - // returned by getEnclosedElements(). - Map namesToValues = Maps.newTreeMap(); - Object[] constants = clazz.getEnumConstants(); - if (constants == null) { - throw new IllegalArgumentException("Class: " + className + " should be an enum and declare " - + "enum constants."); - } - for (Object constant : constants) { - try { - Enum enumConst = (Enum) constant; - namesToValues.put(enumConst.name(), toValueMethod.invoke(enumConst).toString()); - } catch (Exception e) { - // pass - } - } - - // Add the options to the OptionList. - // Note that getEnclosedElements() returns not only enum constants but also method and field - // names, so we need to filter those out using namesToValues. - for (Element field : optionElem.getEnclosedElements()) { - String fieldName = field.getSimpleName().toString(); - if (namesToValues.containsKey(fieldName)) { - String value = namesToValues.get(fieldName); - optionList.addOption(elementToOption(field, value)); - - // Set the default to be the first option, or the option tagged with @Default. - if (optionList.getDefault() == null || isDefault(field)) { - optionList.setDefault(fieldName); - } - } - } - - DeclaredType optionListInterface = (DeclaredType)((TypeElement)optionElem) - .getInterfaces().get(0); - optionList.setUnderlyingType(optionListInterface.getTypeArguments().get(0)); - - if (!optionList.isEmpty()) { - optionLists.put(optionElem.getSimpleName().toString(), optionList); - } - - return !optionList.isEmpty(); - } - - /** - * Returns true if the leement is tagged with the @Default annotation. - * @return true if the element is tagged with the @Default annotation. - */ - private boolean isDefault(Element field) { - for (AnnotationMirror mirror : field.getAnnotationMirrors()) { - if (mirror.getAnnotationType().asElement().getSimpleName().contentEquals("Default")) { - return true; - } - } - return false; - } - - /** - * Converts an Element into an Option. - * @param field the field to convert into an option. - * @param value the backing value associated with that field. - * @return the option constructed from the field and value. - */ - private Option elementToOption(Element field, String value) { - // TODO: getDocComment doesn't seem to work on enum constants? - String description = elementUtils.getDocComment(field); - if (description == null) { - description = ""; - } - // Read only until the first javadoc parameter - description = description.split("[^\\\\][@{]")[0].trim(); - - return new Option( - field.getSimpleName().toString(), - value, - description, - elementUtils.isDeprecated(field) - ); - } - - /** - * Returns the associated helper key if the element has an @Asset annotation. Null otherwise. - * - * @param elem the Element which represents a function (for return types) or a parameter. - * @param type the TypeMirror representing the type of that element. - * @return the associated helper key if the element has an @Asset annotation. - */ - private HelperKey hasAssetsHelper(Element elem, TypeMirror type) { - for (AnnotationMirror mirror : elem.getAnnotationMirrors()) { - if (mirror.getAnnotationType().asElement().getSimpleName().contentEquals("Asset")) { - int index = 0; // Index 0 is the empty filter. - for (Entry entry : - mirror.getElementValues().entrySet()) { - // Make sure we are looking at the value attribute. - if (!entry.getKey().getSimpleName().contentEquals("value")) { - continue; - } - List values = (List) entry.getValue().getValue(); - List filter = new ArrayList(); - for (AnnotationValue v : values) { - filter.add(((String)v.getValue()).toLowerCase()); - } - Collections.sort(filter); - if (!filters.contains(filter)) { - filters.add(filter); - } - index = filters.indexOf(filter); - } - return new HelperKey(HelperType.ASSET, index); - } - } - return null; - } - - /** - * Converts a VariableElement into a Parameter definition. - * @param varElem the element to convert. - * @return the parameter constructed from the variable element. - */ - private Parameter varElemToParameter(VariableElement varElem) { - TypeMirror type = varElem.asType(); - if (type instanceof DeclaredType && ((DeclaredType) type).asElement().toString() - .equals("com.google.appinventor.components.runtime.util.Continuation")) { - Continuation continuation = new Continuation(varElem.getSimpleName().toString(), type, - varElem.getAnnotation(IsColor.class) != null); - continuation.helper = elementToHelperKey(varElem, varElem.asType()); - return continuation; - } else { - Parameter param = new Parameter(varElem.getSimpleName().toString(), type, - varElem.getAnnotation(IsColor.class) != null); - param.helper = elementToHelperKey(varElem, varElem.asType()); - return param; - } - } - - // Transform an @ActivityElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String activityElementToString(ActivityElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // receiver element attributes. - StringBuilder elementString = new StringBuilder(" \\n"); - - // Now, we collect any subelements. - elementString.append(subelementsToString(element.metaDataElements())); - elementString.append(subelementsToString(element.intentFilters())); - - // Finally, we close the element and create its String. - return elementString.append(" \\n").toString(); - } - - // Transform a @ReceiverElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String receiverElementToString(ReceiverElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // receiver element attributes. - StringBuilder elementString = new StringBuilder(" \\n"); - - // Now, we collect any subelements. - elementString.append(subelementsToString(element.metaDataElements())); - elementString.append(subelementsToString(element.intentFilters())); - - // Finally, we close the element and create its String. - return elementString.append(" \\n").toString(); - } - - // Transform a @ServiceElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String serviceElementToString(ServiceElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // service element attributes. - StringBuilder elementString = new StringBuilder(" \\n"); - - // Now, we collect any subelements. - elementString.append(subelementsToString(element.metaDataElements())); - elementString.append(subelementsToString(element.intentFilters())); - - // Finally, we close the element and create its String. - return elementString.append(" \\n").toString(); - } - - // Transform a @ProviderElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String providerElementToString(ProviderElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // content provider element attributes. - StringBuilder elementString = new StringBuilder(" \\n"); - - // Now, we collect any subelements. - elementString.append(subelementsToString(element.metaDataElements())); - elementString.append(subelementsToString(element.pathPermissionElement())); - elementString.append(subelementsToString(element.grantUriPermissionElement())); - - // Finally, we close the element and create its String. - return elementString.append(" \\n").toString(); - } - - // Transform a @MetaDataElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String metaDataElementToString(MetaDataElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // receiver element attributes. - StringBuilder elementString = new StringBuilder(" element and create its String. - return elementString.append("/>\\n").toString(); - } - - // Transform an @IntentFilterElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String intentFilterElementToString(IntentFilterElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // receiver element attributes. - StringBuilder elementString = new StringBuilder(" \\n"); - - // Now, we collect any subelements. - elementString.append(subelementsToString(element.actionElements())); - elementString.append(subelementsToString(element.categoryElements())); - elementString.append(subelementsToString(element.dataElements())); - - // Finally, we close the element and create its String. - return elementString.append(" \\n").toString(); - } - - private static String intentFilterElementToIntentString(IntentFilterElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // receiver element attributes. - StringBuilder elementString = new StringBuilder(" \\n"); - - // Now, we collect any subelements. - elementString.append(subelementsToString(element.actionElements())); - elementString.append(subelementsToString(element.categoryElements())); - elementString.append(subelementsToString(element.dataElements())); - - // Finally, we close the element and create its String. - return elementString.append(" \\n").toString(); - } - - // Transform an @ActionElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String actionElementToString(ActionElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // receiver element attributes. - StringBuilder elementString = new StringBuilder(" element and create its String. - return elementString.append("/>\\n").toString(); - } - - // Transform a @CategoryElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String categoryElementToString(CategoryElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // receiver element attributes. - StringBuilder elementString = new StringBuilder(" element and create its String. - return elementString.append("/>\\n").toString(); - } - - // Transform a @DataElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String dataElementToString(DataElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // receiver element attributes. - StringBuilder elementString = new StringBuilder(" element and create its String. - return elementString.append("/>\\n").toString(); - } - - // Transform a @PathPermissionElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String pathPermissionElementToString(PathPermissionElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // receiver element attributes. - StringBuilder elementString = new StringBuilder(" element and create its String. - return elementString.append("/>\\n").toString(); - } - - // Transform a @GrantUriPermissionElement into an XML element String for use later - // in creating AndroidManifest.xml. - private static String grantUriPermissionElementToString(GrantUriPermissionElement element) - throws IllegalAccessException, InvocationTargetException { - // First, we build the element's opening tag including any - // receiver element attributes. - StringBuilder elementString = new StringBuilder(" element and create its String. - return elementString.append("/>\\n").toString(); - } - - // Build the attribute String for a given XML element modeled by an - // annotation. - // - // Note that we use the fully qualified names for certain classes in the - // "java.lang.reflect" package to avoid namespace collisions. - private static String elementAttributesToString(Annotation element) - throws IllegalAccessException, InvocationTargetException { - StringBuilder attributeString = new StringBuilder(""); - Class clazz = element.annotationType(); - java.lang.reflect.Method[] methods = clazz.getDeclaredMethods(); - String attributeSeparator = ""; - for (java.lang.reflect.Method method : methods) { - int modCode = method.getModifiers(); - if (java.lang.reflect.Modifier.isPublic(modCode) - && !java.lang.reflect.Modifier.isStatic(modCode)) { - if (method.getReturnType().getSimpleName().equals("String")) { - // It is an XML element attribute. - String attributeValue = (String) method.invoke(clazz.cast(element)); - if (!attributeValue.equals("")) { - attributeString.append(attributeSeparator); - attributeString.append("android:"); - attributeString.append(method.getName()); - attributeString.append("=\\\""); - attributeString.append(attributeValue); - attributeString.append("\\\""); - attributeSeparator = " "; - } - } - } - } - return attributeString.toString(); - } - - // Build the subelement String for a given array of XML elements modeled by - // corresponding annotations. - private static String subelementsToString(Annotation[] subelements) - throws IllegalAccessException, InvocationTargetException { - StringBuilder subelementString = new StringBuilder(""); - for (Annotation subelement : subelements) { - if (subelement instanceof MetaDataElement) { - subelementString.append(metaDataElementToString((MetaDataElement) subelement)); - } else if (subelement instanceof IntentFilterElement) { - subelementString.append(intentFilterElementToString((IntentFilterElement) subelement)); - } else if (subelement instanceof ActionElement) { - subelementString.append(actionElementToString((ActionElement) subelement)); - } else if (subelement instanceof CategoryElement) { - subelementString.append(categoryElementToString((CategoryElement) subelement)); - } else if (subelement instanceof DataElement) { - subelementString.append(dataElementToString((DataElement) subelement)); - } else if (subelement instanceof PathPermissionElement) { - subelementString.append(pathPermissionElementToString((PathPermissionElement) subelement)); - } else if (subelement instanceof GrantUriPermissionElement) { - subelementString.append(grantUriPermissionElementToString((GrantUriPermissionElement) subelement)); - } - } - return subelementString.toString(); - } - - private void processProperties(ComponentInfo componentInfo, - Element componentElement) { - // We no longer support properties that use the variant type. - - Map propertyElementsToCheck = new HashMap<>(); - - for (Element element : componentElement.getEnclosedElements()) { - if (!isPublicMethod(element)) { - continue; - } - - // Get the name of the prospective property. - String propertyName = element.getSimpleName().toString(); - processConditionalAnnotations(componentInfo, element, propertyName); - - // Designer property information - DesignerProperty designerProperty = element.getAnnotation(DesignerProperty.class); - if (designerProperty != null) { - componentInfo.designerProperties.put(propertyName, designerProperty); - propertyElementsToCheck.put(propertyName, element); - } - - // If property is overridden without again using SimpleProperty, remove - // it. For example, this is done for Ball.Width(), which overrides the - // inherited property Width() because Ball uses Radius() instead. - if (element.getAnnotation(SimpleProperty.class) == null) { - if (componentInfo.properties.containsKey(propertyName)) { - // Look at the prior property's componentInfoName. - Property priorProperty = componentInfo.properties.get(propertyName); - if (priorProperty.componentInfoName.equals(componentInfo.name)) { - // The prior property's componentInfoName is the same as this componentInfo's name. - // This is just a read-only or write-only property. We don't need to do anything - // special here. - } else { - // The prior property's componentInfoName is the different than this componentInfo's - // name. This is an overridden property without the SimpleProperty annotation and we - // need to remove it. - componentInfo.properties.remove(propertyName); - } - } - } else { - // Create a new Property element, then compare and combine it with any - // prior Property element with the same property name, verifying that - // they are consistent. - Property newProperty = executableElementToProperty(element, componentInfo.name); - if (designerProperty != null - && designerProperty.editorType().equals(PropertyTypeConstants.PROPERTY_TYPE_COLOR)) { - // Properties that use a color editor should be marked as a color property - newProperty.color = true; - } - - if (componentInfo.properties.containsKey(propertyName)) { - Property priorProperty = componentInfo.properties.get(propertyName); - - if (!priorProperty.type.equals(newProperty.type)) { - // If the getter type is different than the setter type, set the type to getter. - // If we have multiple setters with different types, throw an error. - if (newProperty.readable) { - priorProperty.type = newProperty.type; - } else if (priorProperty.writable) { - // TODO(user): handle lang_def and document generation for multiple setters. - throw new RuntimeException("Inconsistent types " + priorProperty.type + - " and " + newProperty.type + " for property " + - propertyName + " in component " + componentInfo.name); - } - } - - // TODO: Should this be moved into the Property class? This was tricky for me to discover. - // Merge newProperty into priorProperty, which is already in the properties map. - if ((priorProperty.description.isEmpty() || priorProperty.isDefaultDescription() - || element.getAnnotation(Override.class) != null) - && !newProperty.description.isEmpty() && !newProperty.isDefaultDescription()) { - priorProperty.setDescription(newProperty.description); - } - if (!newProperty.longDescription.isEmpty() && !newProperty.isDefaultDescription()) { /* Latter descriptions of the same property override earlier descriptions. */ - priorProperty.longDescription = newProperty.longDescription; - } - - if (priorProperty.propertyCategory == PropertyCategory.UNSET) { - priorProperty.propertyCategory = newProperty.propertyCategory; - } else if (newProperty.propertyCategory != priorProperty.propertyCategory && - newProperty.propertyCategory != PropertyCategory.UNSET) { - throw new RuntimeException( - "Property " + propertyName + " has inconsistent categories " + - priorProperty.propertyCategory + " and " + - newProperty.propertyCategory + " in component " + - componentInfo.name); - } - if (priorProperty.helper == null) { - priorProperty.helper = newProperty.helper; - } - priorProperty.readable = priorProperty.readable || newProperty.readable; - priorProperty.writable = priorProperty.writable || newProperty.writable; - priorProperty.userVisible = priorProperty.isUserVisible() && newProperty.isUserVisible(); - priorProperty.deprecated = priorProperty.isDeprecated() && newProperty.isDeprecated(); - priorProperty.componentInfoName = componentInfo.name; - priorProperty.color = newProperty.color || priorProperty.color; - } else { - // Add the new property to the properties map. - componentInfo.properties.put(propertyName, newProperty); - } - } - } - - // Verify that every DesignerComponent has a corresponding property entry. A mismatch results - // in App Inventor being unable to generate code for the designer since the type information - // is in the block property only. We check that the designer property name is also present - // in the block properties. If not, an error is reported and the build terminates. - Set propertyNames = new HashSet<>(componentInfo.designerProperties.keySet()); - propertyNames.removeAll(componentInfo.properties.keySet()); - if (!propertyNames.isEmpty()) { - for (String propertyName : propertyNames) { - messager.printMessage(Kind.ERROR, - String.format(MISSING_SIMPLE_PROPERTY_ANNOTATION, propertyName), - propertyElementsToCheck.get(propertyName)); - } - } - } - - // Note: The top halves of the bodies of processEvent() and processMethods() - // are very similar. I tried refactoring in several ways but it just made - // things more complex. - private void processEvents(ComponentInfo componentInfo, - Element componentElement) { - for (Element element : componentElement.getEnclosedElements()) { - if (!isPublicMethod(element)) { - continue; - } - - // Get the name of the prospective event. - String eventName = element.getSimpleName().toString(); - processConditionalAnnotations(componentInfo, element, eventName); - - SimpleEvent simpleEventAnnotation = element.getAnnotation(SimpleEvent.class); - - // Remove overriden events unless SimpleEvent is again specified. - // See comment in processProperties for an example. - if (simpleEventAnnotation == null) { - if (componentInfo.events.containsKey(eventName)) { - componentInfo.events.remove(eventName); - } - } else { - String eventDescription = simpleEventAnnotation.description(); - String longEventDescription = elementUtils.getDocComment(element); - if (eventDescription.isEmpty()) { - eventDescription = longEventDescription; - if (eventDescription == null) { - messager.printMessage(Diagnostic.Kind.WARNING, - "In component " + componentInfo.name + - ", event " + eventName + - " is missing a description."); - eventDescription = ""; - } - } - boolean userVisible = simpleEventAnnotation.userVisible(); - boolean deprecated = elementUtils.isDeprecated(element); - Event event = new Event(eventName, eventDescription, longEventDescription, userVisible, deprecated); - componentInfo.events.put(event.name, event); - - // Verify that this element has an ExecutableType. - if (!(element instanceof ExecutableElement)) { - throw new RuntimeException("In component " + componentInfo.name + - ", the representation of SimpleEvent " + eventName + - " does not implement ExecutableElement."); - } - ExecutableElement e = (ExecutableElement) element; - - // Extract the parameters. - for (VariableElement ve : e.getParameters()) { - event.addParameter(varElemToParameter(ve)); - updateComponentTypes(ve.asType()); - } - } - } - } - - private void processMethods(ComponentInfo componentInfo, Element componentElement) { - for (Element element : componentElement.getEnclosedElements()) { - if (!isPublicMethod(element)) { - continue; - } - - // Get the name of the prospective method. - String methodName = element.getSimpleName().toString(); - processConditionalAnnotations(componentInfo, element, methodName); - - SimpleFunction simpleFunctionAnnotation = element.getAnnotation(SimpleFunction.class); - - // Remove overriden methods unless SimpleFunction is again specified. - // See comment in processProperties for an example. - if (simpleFunctionAnnotation == null) { - if (componentInfo.methods.containsKey(methodName)) { - componentInfo.methods.remove(methodName); - } - } else { - String methodLongDescription = elementUtils.getDocComment(element); - String methodDescription = simpleFunctionAnnotation.description(); - if (methodDescription.isEmpty()) { - methodDescription = methodLongDescription; - if (methodDescription == null) { - messager.printMessage(Diagnostic.Kind.WARNING, - "In component " + componentInfo.name + - ", method " + methodName + - " is missing a description."); - methodDescription = ""; - } - } - boolean userVisible = simpleFunctionAnnotation.userVisible(); - boolean deprecated = elementUtils.isDeprecated(element); - Method method = new Method(methodName, methodDescription, methodLongDescription, userVisible, deprecated); - componentInfo.methods.put(method.name, method); - - // Verify that this element has an ExecutableType. - if (!(element instanceof ExecutableElement)) { - throw new RuntimeException("In component " + componentInfo.name + - ", the representation of SimpleFunction " + methodName + - " does not implement ExecutableElement."); - } - ExecutableElement e = (ExecutableElement) element; - - // Extract the parameters. - Continuation continuation = null; - for (VariableElement ve : e.getParameters()) { - Parameter p = varElemToParameter(ve); - if (p instanceof Continuation) { - if (continuation != null) { - messager.printMessage(Kind.ERROR, "A method can have at most one continuation", - element); - } else { - continuation = (Continuation) p; - } - } else { - method.addParameter(p); - } - updateComponentTypes(ve.asType()); - } - - // Extract the return type. - if (e.getReturnType().getKind() != TypeKind.VOID) { - if (continuation != null) { - messager.printMessage(Kind.ERROR, "Methods with a continuation must be void.", - element); - } - method.returnType = e.getReturnType(); - method.returnHelperKey = elementToHelperKey(e, method.returnType); - if (e.getAnnotation(IsColor.class) != null) { - method.color = true; - } - updateComponentTypes(e.getReturnType()); - } else if (continuation != null) { - method.continuation = true; - if (!((DeclaredType) continuation.underlyingType).toString().equals("java.lang.Void")) { - method.returnType = continuation.underlyingType; - } - } - } - } - } - - /** - * Processes the conditional annotations for a component into a dictionary - * mapping blocks to those annotations. - * - * @param componentInfo Component info in which to store the conditional information. - * @param element The currently processed Java language element. This should be a method - * annotated with either @UsesPermission, @UsesBroadcastReceivers, @UsesServices or @UsesContentProviders - * @param blockName The name of the block as it appears in the sources. - */ - private void processConditionalAnnotations(ComponentInfo componentInfo, Element element, - String blockName) { - // Conditional UsesPermissions - UsesPermissions usesPermissions = element.getAnnotation(UsesPermissions.class); - if (usesPermissions != null) { - componentInfo.conditionalPermissions.put(blockName, usesPermissions.value()); - } - - UsesBroadcastReceivers broadcastReceiver = element.getAnnotation(UsesBroadcastReceivers.class); - if (broadcastReceiver != null) { - try { - Set receivers = new HashSet<>(); - for (ReceiverElement re : broadcastReceiver.receivers()) { - updateWithNonEmptyValue(receivers, receiverElementToString(re)); - } - componentInfo.conditionalBroadcastReceivers.put(blockName, receivers.toArray(new String[0])); - } catch (Exception e) { - messager.printMessage(Kind.ERROR, "Unable to process broadcast receiver", element); - } - } - - // Gather the required queries and build their element strings. - UsesQueries usesQueries = element.getAnnotation(UsesQueries.class); - if (usesQueries != null) { - try { - Set queries = new HashSet<>(); - for (String packageName : usesQueries.packageNames()) { - updateWithNonEmptyValue(queries, ""); - } - for (IntentFilterElement intent : usesQueries.intents()) { - updateWithNonEmptyValue(queries, intentFilterElementToIntentString(intent)); - } - for (ProviderElement provider : usesQueries.providers()) { - updateWithNonEmptyValue(queries, providerElementToString(provider)); - } - componentInfo.conditionalQueries.put(blockName, queries.toArray(new String[0])); - } catch (IllegalAccessException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " - + "service attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " - + "service attributes and subelements for component " + componentInfo.name); - throw new RuntimeException(e); - } - } - - UsesServices service = element.getAnnotation(UsesServices.class); - if (service != null) { - try { - Set services = new HashSet<>(); - for (ServiceElement se : service.services()) { - updateWithNonEmptyValue(services, serviceElementToString(se)); - } - componentInfo.conditionalServices.put(blockName, services.toArray(new String[0])); - } catch (Exception e) { - messager.printMessage(Kind.ERROR, "Unable to process service", element); - } - } - - UsesContentProviders contentProvider = element.getAnnotation(UsesContentProviders.class); - if (contentProvider != null) { - try { - Set providers = new HashSet<>(); - for (ProviderElement pe : contentProvider.providers()) { - updateWithNonEmptyValue(providers, providerElementToString(pe)); - } - componentInfo.conditionalContentProviders.put(blockName, providers.toArray(new String[0])); - } catch (Exception e) { - messager.printMessage(Kind.ERROR, "Unable to process content provider", element); - } - } - } - - /** - *

    Outputs the required component information in the desired format. It is called by - * {@link #process} after the fields {@link #components} and {@link #messager} - * have been populated.

    - * - *

    Implementations of this methods should call {@link #getOutputWriter(String)} to obtain a - * {@link Writer} for their output. Diagnostic messages should be written - * using {@link #messager}.

    - */ - protected abstract void outputResults() throws IOException; - - /** - * Returns the appropriate Yail type for a given Java type. - * - * @param type a TypeMirror representing the Java type. - * @return the equivalent Yail type. All component names are converted to "component". - * @throws RuntimeException if the parameter cannot be mapped to any of the - * legal return values - */ - protected final String javaTypeToYailType(TypeMirror type) { - return javaTypeToYailType(type, false); - } - - protected final String javaTypeToYailType(TypeMirror type, boolean allowBoxed) { - if (!allowBoxed && BOXED_TYPES.containsKey(type.toString())) { - throw new IllegalArgumentException(String.format(BOXED_TYPE_ERROR, type, - BOXED_TYPES.get(type.toString()))); - } else if (allowBoxed && BOXED_TYPES.containsKey(type.toString())) { - return BOXED_TYPES.get(type.toString()); - } - - // Handle enums - if (isOptionList(type)) { - // In YAIL code generation we need any easy way to test if a type symbol, represents an - // abstract option type. We have chosen to do this by having each type end with "Enum". For - // example, if you have a parameter that accepts a Direction the type symbol passed to Yail - // would be 'com.google.appinventor.components.common.DirectionEnum. - return type.toString() + "Enum"; - } - - String typeString = type.toString(); - // boolean -> boolean - if (typeString.equals("boolean")) { - return typeString; - } - // String -> text - if (typeString.equals("java.lang.String")) { - return "text"; - } - // {float, double, int, short, long, byte} -> number - if (typeString.equals("float") || typeString.equals("double") || typeString.equals("int") - || typeString.equals("short") || typeString.equals("long") || typeString.equals("byte")) { - return "number"; - } - // YailList -> list - if (typeString.equals("com.google.appinventor.components.runtime.util.YailList")) { - return "list"; - } - // List -> list - if (typeString.startsWith("java.util.List")) { - return "list"; - } - if (typeString.equals("com.google.appinventor.components.runtime.util.YailDictionary")) { - return "dictionary"; - } - if (typeString.equals("com.google.appinventor.components.runtime.util.YailObject")) { - return "yailobject"; - } - - // Calendar -> InstantInTime - if (typeString.equals("java.util.Calendar")) { - return "InstantInTime"; - } - - // Only components can be data sources in the block language - if (typeString.startsWith("com.google.appinventor.components.runtime.DataSource")) { - return "component"; - } - - if (typeString.equals("java.lang.Object")) { - return "any"; - } - - if (typeString.startsWith("com.google.appinventor.components.runtime.util.Continuation")) { - return "continuation"; - } - - if (typeString.equals("com.google.appinventor.components.runtime.Component")) { - return "component"; - } - - // Check if it's a component. - if (componentTypes.contains(typeString)) { - return "component"; - } - - throw new IllegalArgumentException("Cannot convert Java type '" + typeString - + "' to Yail type"); - } - - /** - * Creates and returns a {@link FileObject} for output. - * - * @param fileName the name of the output file - * @return the {@code FileObject} - * @throws IOException if the file cannot be created - */ - protected FileObject createOutputFileObject(String fileName) throws IOException { - return processingEnv.getFiler(). - createResource(StandardLocation.SOURCE_OUTPUT, OUTPUT_PACKAGE, fileName); - } - - /** - * Returns a {@link Writer} to which output should be written. As with any - * {@code Writer}, the methods {@link Writer#flush()} and {@link Writer#close()} - * should be called when output is complete. - * - * @param fileName the name of the output file - * @return the {@code Writer} - * @throws IOException if the {@code Writer} or underlying {@link FileObject} - * cannot be created - */ - protected Writer getOutputWriter(String fileName) throws IOException { - return createOutputFileObject(fileName).openWriter(); - } - - /** - * Tracks the superclass and superinterfaces for the given type and if the type inherits from - * {@link com.google.appinventor.components.runtime.Component} then it adds the class to the - * componentTypes list. This allows properties, methods, and events to use concrete Component - * types as parameters and return values. - * - * @param type a TypeMirror representing a type on the class path - */ - private void updateComponentTypes(TypeMirror type) { - if (type.getKind() == TypeKind.DECLARED) { - type.accept(new SimpleTypeVisitor7>(false) { - @Override - public Boolean visitDeclared(DeclaredType t, Set types) { - final String typeName = t.asElement().toString(); - if ("com.google.appinventor.components.runtime.Component".equals(typeName)) { - return true; - } - if (!types.contains(typeName)) { - types.add(typeName); - final TypeElement typeElement = (TypeElement) t.asElement(); - if (typeElement.getSuperclass().accept(this, types)) { - componentTypes.add(typeName); - return true; - } - for (TypeMirror iface : typeElement.getInterfaces()) { - if (iface.accept(this, types)) { - componentTypes.add(typeName); - return true; - } - } - } - return componentTypes.contains(typeName); - } - }, visitedTypes); - } - } - - private void updateWithNonEmptyValue(Set collection, String value) { - String trimmedValue = value.trim(); - if (!trimmedValue.isEmpty()) { - collection.add(trimmedValue); - } - } -} +// -*- mode: java; c-basic-offset: 2; -*- +// Copyright 2009-2011 Google, All Rights reserved +// Copyright 2011-2019 MIT, All rights reserved +// Released under the Apache License, Version 2.0 +// http://www.apache.org/licenses/LICENSE-2.0 + +package com.google.appinventor.components.scripts; + +import com.google.appinventor.components.annotations.DesignerComponent; +import com.google.appinventor.components.annotations.DesignerProperty; +import com.google.appinventor.components.annotations.IsColor; +import com.google.appinventor.components.annotations.PropertyCategory; +import com.google.appinventor.components.annotations.SimpleEvent; +import com.google.appinventor.components.annotations.SimpleFunction; +import com.google.appinventor.components.annotations.SimpleObject; +import com.google.appinventor.components.annotations.SimpleProperty; +import com.google.appinventor.components.annotations.SimpleBroadcastReceiver; +import com.google.appinventor.components.annotations.UsesActivityMetadata; +import com.google.appinventor.components.annotations.UsesApplicationMetadata; +import com.google.appinventor.components.annotations.UsesAssets; +import com.google.appinventor.components.annotations.UsesLibraries; +import com.google.appinventor.components.annotations.UsesNativeLibraries; +import com.google.appinventor.components.annotations.UsesPermissions; +import com.google.appinventor.components.annotations.UsesActivities; +import com.google.appinventor.components.annotations.UsesBroadcastReceivers; +import com.google.appinventor.components.annotations.UsesContentProviders; +import com.google.appinventor.components.annotations.UsesQueries; +import com.google.appinventor.components.annotations.UsesServices; +import com.google.appinventor.components.annotations.androidmanifest.ActivityElement; +import com.google.appinventor.components.annotations.androidmanifest.ReceiverElement; +import com.google.appinventor.components.annotations.androidmanifest.IntentFilterElement; +import com.google.appinventor.components.annotations.androidmanifest.MetaDataElement; +import com.google.appinventor.components.annotations.androidmanifest.ActionElement; +import com.google.appinventor.components.annotations.androidmanifest.DataElement; +import com.google.appinventor.components.annotations.androidmanifest.CategoryElement; +import com.google.appinventor.components.annotations.androidmanifest.ServiceElement; +import com.google.appinventor.components.annotations.androidmanifest.ProviderElement; +import com.google.appinventor.components.annotations.androidmanifest.PathPermissionElement; +import com.google.appinventor.components.annotations.androidmanifest.GrantUriPermissionElement; +import com.google.appinventor.components.common.PropertyTypeConstants; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import java.io.IOException; +import java.io.Writer; + +import java.lang.annotation.Annotation; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.SortedMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.Messager; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.AnnotationMirror; +import javax.lang.model.element.AnnotationValue; +import javax.lang.model.element.AnnotationValueVisitor; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.Modifier; +import javax.lang.model.element.PackageElement; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; +import javax.lang.model.type.ArrayType; +import javax.lang.model.type.DeclaredType; +import javax.lang.model.type.ErrorType; +import javax.lang.model.type.ExecutableType; +import javax.lang.model.type.NoType; +import javax.lang.model.type.NullType; +import javax.lang.model.type.PrimitiveType; +import javax.lang.model.type.TypeKind; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.type.TypeVariable; +import javax.lang.model.type.UnionType; +import javax.lang.model.type.WildcardType; +import javax.lang.model.util.AbstractTypeVisitor7; +import javax.lang.model.util.Elements; +import javax.lang.model.util.SimpleTypeVisitor7; +import javax.lang.model.util.Types; + +import javax.tools.Diagnostic; +import javax.tools.Diagnostic.Kind; +import javax.tools.FileObject; +import javax.tools.StandardLocation; + +/** + * Processor for generating output files based on the annotations and + * javadoc in the component source code. + *

    + * Specifically, this reads over the source files, building up a representation + * of components and their designer properties, properties, methods, and + * events. Concrete subclasses implement the method {@link #outputResults()} + * to generate output. + *

    + * Currently, the following annotations are used: + *

      + *
    • {@link DesignerComponent} and {@link SimpleObject} to identify + * components. Subclasses can distinguish between the two through + * the boolean fields + * {@link ComponentProcessor.ComponentInfo#designerComponent} and + * {@link ComponentProcessor.ComponentInfo#simpleObject}. + *
    • {@link DesignerProperty} to identify designer properties. + *
    • {@link SimpleProperty} to identify properties. + *
    • {@link SimpleFunction} to identify methods. + *
    • {@link SimpleEvent} to identify events. + *
    + * + * @author spertus@google.com (Ellen Spertus) + * + * [lyn, 2015/12/29] Added deprecated instance variable to ParameterizedFeature. + * This is inherited by Event, Method, and Property, which are modified + * slightly to handle it. + * + * [Will, 2016/9/20] Added methods to process annotations in the package + * com.google.appinventor.components.annotations.androidmanifest and the + * appropriate calls in {@link #processComponent(Element)}. + */ +public abstract class ComponentProcessor extends AbstractProcessor { + private static final String OUTPUT_PACKAGE = ""; + + private static final String MISSING_SIMPLE_PROPERTY_ANNOTATION = + "Designer property %s does not have a corresponding @SimpleProperty annotation."; + private static final String BOXED_TYPE_ERROR = + "Found use of boxed type %s. Please use the primitive type %s instead"; + + // Returned by getSupportedAnnotationTypes() + private static final Set SUPPORTED_ANNOTATION_TYPES = ImmutableSet.of( + "com.google.appinventor.components.annotations.DesignerComponent", + "com.google.appinventor.components.annotations.DesignerProperty", + "com.google.appinventor.components.annotations.SimpleEvent", + "com.google.appinventor.components.annotations.SimpleFunction", + "com.google.appinventor.components.annotations.SimpleObject", + "com.google.appinventor.components.annotations.SimpleProperty", + // TODO(Will): Remove the following string once the deprecated + // @SimpleBroadcastReceiver annotation is removed. It should + // should remain for the time being because otherwise we'll break + // extensions currently using @SimpleBroadcastReceiver. + "com.google.appinventor.components.annotations.SimpleBroadcastReceiver", + "com.google.appinventor.components.annotations.UsesAssets", + "com.google.appinventor.components.annotations.UsesLibraries", + "com.google.appinventor.components.annotations.UsesNativeLibraries", + "com.google.appinventor.components.annotations.UsesActivities", + "com.google.appinventor.components.annotations.UsesBroadcastReceivers", + "com.google.appinventor.components.annotations.UsesPermissions", + "com.google.appinventor.components.annotations.UsesQueries", + "com.google.appinventor.components.annotations.UsesServices", + "com.google.appinventor.components.annotations.UsesContentProviders"); + + // Returned by getRwString() + private static final String READ_WRITE = "read-write"; + private static final String READ_ONLY = "read-only"; + private static final String WRITE_ONLY = "write-only"; + + // Must match buildserver.compiler.ARMEABI_V7A_SUFFIX + private static final String ARMEABI_V7A_SUFFIX = "-v7a"; + // Must match buildserver.compiler.ARMEABI_V8A_SUFFIX + private static final String ARM64_V8A_SUFFIX = "-v8a"; + // Must match buildserver.compiler.X86_64_SUFFIX + private static final String X86_64_SUFFIX = "-x8a"; + + private static final String TYPE_PLACEHOLDER = "%type%"; + + private static final Map BOXED_TYPES = new HashMap<>(); + + static { + BOXED_TYPES.put("java.lang.Boolean", "boolean"); + BOXED_TYPES.put("java.lang.Byte", "byte"); + BOXED_TYPES.put("java.lang.Char", "char"); + BOXED_TYPES.put("java.lang.Short", "short"); + BOXED_TYPES.put("java.lang.Integer", "int"); + BOXED_TYPES.put("java.lang.Long", "long"); + BOXED_TYPES.put("java.lang.Float", "float"); + BOXED_TYPES.put("java.lang.Double", "double"); + } + + // The next two fields are set in init(). + /** + * A handle allowing access to facilities provided by the annotation + * processing tool framework + */ + private Elements elementUtils; + private Types typeUtils; + + /** + * Produced through {@link ProcessingEnvironment#getMessager()} and + * used for outputing errors and warnings. + */ + // Set in process() + protected Messager messager; + + /** + * Indicates which pass is being performed by the Java annotation processor + */ + private int pass = 0; + + /** + * Information about every App Inventor component. Keys are fully-qualified names + * (such as "com.google.appinventor.components.runtime.components.android.Label"), and + * values are the corresponding {@link ComponentProcessor.ComponentInfo} objects. + * This is constructed by {@link #process} for use in {@link #outputResults()}. + */ + protected final SortedMap components = Maps.newTreeMap(); + + /** + * Information about every option list helper block. Keys are simple names, and values are the + * corresponding {@link ComponentProcessor.OptionList} objects. This is constructed as a side + * effect of {@link #process} for use in {@link #outputResults()}. + */ + protected final Map optionLists = Maps.newTreeMap(); + + /** + * A list of asset filters, which are in fact lists of strings. This gets intialized with an empty + * filter by the ComponentProcessor constructor. + */ + protected List> filters; + + private final List componentTypes = Lists.newArrayList(); + + /** + * A set of visited types in the class hierarchy. This is used to reduce the complexity of + * detecting whether a class implements {@link com.google.appinventor.components.runtime.Component} + * from O(n^2) to O(n) by tracking visited nodes to prevent repeat explorations of the class tree. + */ + private final Set visitedTypes = new HashSet<>(); + + public ComponentProcessor() { + filters = new ArrayList>(); + filters.add(new ArrayList()); + } + + /** + * Represents a parameter consisting of a name and a type. + */ + protected class Parameter implements Cloneable { + /** + * The parameter name + */ + protected final String name; + + /** + * The parameter's Java type, such as int or java.lang.String. + */ + protected final TypeMirror type; + + /** + * Indicate whether this parameter is an integer that represents a color. + */ + protected final boolean color; + + /** + * The helper key associated with this parameter, if any. + */ + protected HelperKey helper; + + /** + * Constructs a Parameter. + * + * @param name the parameter name + * @param type the parameter's Java type (such as int or java.lang.String) + */ + protected Parameter(String name, TypeMirror type) { + this(name, type, false); + } + + protected Parameter(String name, TypeMirror type, boolean color) { + this.name = name; + this.type = type; + this.color = color; + // helper is null by default. + } + + /** + * Returns the HelperKey associated with this parameter, if one exists. Null otherwise. + * @return the HelperKey associated with this parameter. + */ + protected HelperKey getHelperKey() { + return helper; + } + + /** + * Returns the string representation of the Yail type for this parameter. + * @return the string representation of the Yail type for this parameter. + * @throws RuntimeException if {@code parameter} does not have a + * corresponding Yail type + */ + protected String getYailType() { + return javaTypeToYailType(type); + } + + @Override + public Parameter clone() { + Parameter param = new Parameter(name, type, color); + param.helper = helper; + return param; + } + } + + protected class Continuation extends Parameter { + protected final TypeMirror underlyingType; + + protected Continuation(String name, final TypeMirror type) { + this(name, type, false); + } + + protected Continuation(String name, TypeMirror type, boolean color) { + super(name, type, color); + underlyingType = type.accept(new AbstractTypeVisitor7() { + @Override + public TypeMirror visitPrimitive(PrimitiveType t, Void unused) { + return null; + } + + @Override + public TypeMirror visitNull(NullType t, Void unused) { + return null; + } + + @Override + public TypeMirror visitArray(ArrayType t, Void unused) { + return null; + } + + @Override + public TypeMirror visitDeclared(DeclaredType t, Void unused) { + List arglist = t.getTypeArguments(); + if (arglist.isEmpty()) { + messager.printMessage(Kind.ERROR, "Continuation should be specialized with type.", + t.asElement()); + } + return arglist.get(0); + } + + @Override + public TypeMirror visitError(ErrorType t, Void unused) { + return null; + } + + @Override + public TypeMirror visitTypeVariable(TypeVariable t, Void unused) { + return null; + } + + @Override + public TypeMirror visitWildcard(WildcardType t, Void unused) { + return null; + } + + @Override + public TypeMirror visitExecutable(ExecutableType t, Void unused) { + return null; + } + + @Override + public TypeMirror visitNoType(NoType t, Void unused) { + return null; + } + + @Override + public TypeMirror visitUnion(UnionType t, Void unused) { + return null; + } + }, null); + } + + protected String getContinuationType() { + return javaTypeToYailType(underlyingType, true); + } + } + + /** + * Represents a component feature that has a name and a description. + */ + protected abstract static class Feature { + private static final Pattern AT_SIGN = Pattern.compile("[^\\\\]@"); + private static final Pattern LINK_FORM = Pattern.compile("\\{@link ([A-Za-z]*#?)([A-Za-z]*)[^}]*}"); + private static final Pattern CODE_FORM = Pattern.compile("\\{@code ([^}]*)}"); + + private final String featureType; + protected final String name; + protected String description; + protected boolean defaultDescription = false; + protected String longDescription; + protected boolean userVisible; + protected boolean deprecated; + + protected Feature(String name, String description, String longDescription, String featureType, + boolean userVisible, boolean deprecated) { + this.featureType = featureType; + this.name = name; + setDescription(description); + setLongDescription(longDescription); + this.userVisible = userVisible; + this.deprecated = deprecated; + } + + public boolean isDefaultDescription() { + return defaultDescription; + } + + public void setDescription(String description) { + if (description == null || description.isEmpty()) { + this.description = featureType + " for " + name; + defaultDescription = true; + } else { + // Throw out the first @ or { and everything after it, + // in order to strip out @param, @author, {@link ...}, etc. + this.description = description.split("@|\\{@")[0].trim(); + this.description = removeMarkup(this.description); + defaultDescription = false; + } + } + private String removeMarkup(String str) { + String result = str.replaceAll("\\\\(.)", "$1"); + result = result.replaceAll("\\[([a-zA-Z0-9]*)\\]\\(#.*\\)", "$1"); + return result; + } + public void setLongDescription(String longDescription) { + if (longDescription == null || longDescription.isEmpty()) { + this.longDescription = this.description; + } else if (longDescription.contains("@suppressdoc")) { + this.longDescription = ""; + } else { + this.longDescription = longDescription; + } + // Handle links + Matcher linkMatcher = LINK_FORM.matcher(this.longDescription); + StringBuffer sb = new StringBuffer(); + int lastEnd = 0; + while (linkMatcher.find(lastEnd)) { + sb.append(this.longDescription, lastEnd, linkMatcher.start()); + String clazz = linkMatcher.group(1); + if (clazz.endsWith("#")) { + clazz = clazz.substring(0, clazz.length() - 1); + } + if ("Form".equals(clazz)) { + clazz = "Screen"; + } + String func = linkMatcher.group(2); + sb.append("["); + if (!clazz.isEmpty()) { + sb.append("`"); + sb.append(clazz); + sb.append("`"); + if (!func.isEmpty()) { + sb.append("'s "); + } + } + if (!func.isEmpty()) { + sb.append("`"); + sb.append(func); + sb.append("`"); + } + sb.append("](#"); + if (clazz.isEmpty()) { + sb.append("%type%."); + } else { + sb.append(clazz); + if (!func.isEmpty()) { + sb.append("."); + } + } + if (!func.isEmpty()) { + sb.append(func); + } + sb.append(")"); + lastEnd = linkMatcher.end(); + } + sb.append(this.longDescription.substring(lastEnd)); + this.longDescription = sb.toString(); + // Map {@code foo} to `foo` + sb = new StringBuffer(); + Matcher codeMatcher = CODE_FORM.matcher(this.longDescription); + lastEnd = 0; + while (codeMatcher.find(lastEnd)) { + sb.append(this.longDescription, lastEnd, codeMatcher.start()); + sb.append("`"); + sb.append(codeMatcher.group(1)); + sb.append("`"); + lastEnd = codeMatcher.end(); + } + sb.append(this.longDescription.substring(lastEnd)); + this.longDescription = sb.toString(); + // Strip out the Javadoc annotations (@param, etc.) for end-user documentation + Matcher m = AT_SIGN.matcher(this.longDescription); + if (m.find()) { + this.longDescription = this.longDescription.substring(0, m.start() + 1); + } + // Replace escaped @ with just @, e.g., so we can use @ in email address examples. + this.longDescription = this.longDescription.replaceAll("\\\\@", "@").trim(); + } + + public String getLongDescription(ComponentInfo component) { + if (longDescription == null || longDescription.isEmpty()) { + return description; + } + String name = component.name.equals("Form") ? "Screen" : component.name; + return longDescription.replaceAll("%type%", name).trim(); + } + + /** + * Returns whether this property is visible in the Blocks Editor, as retrieved + * from {@link SimpleProperty#userVisible()}. + * + * @return whether the property is visible in the Blocks Editor + */ + protected boolean isUserVisible() { + return userVisible; + } + + /** + * Returns whether this property is deprecated in the Blocks Editor. + * + * @return whether the property is visible in the Blocks Editor + */ + protected boolean isDeprecated() { + return deprecated; + } + } + + /** + * Represents a component feature that has a name, description, and + * parameters. + */ + protected abstract class ParameterizedFeature extends Feature { + // Inherits name, description + protected final List parameters; + + protected ParameterizedFeature(String name, String description, String longDescription, + String feature, boolean userVisible, boolean deprecated) { + super(name, description, longDescription, feature, userVisible, deprecated); + parameters = Lists.newArrayList(); + } + + /** + * Adds the given parameter to this ParameterizedFeature. + * @param param The parameter to add to this ParameterizedFeature. + */ + protected void addParameter(Parameter param) { + parameters.add(param); + } + + /** + * Generates a comma-separated string corresponding to the parameter list, + * using Yail types (e.g., "number n, text t1"). + * + * @return a string representation of the parameter list + * @throws RuntimeException if the parameter type cannot be mapped to any + * of the legal return values + */ + protected String toParameterString() { + StringBuilder sb = new StringBuilder(); + int count = 0; + for (Parameter param : parameters) { + sb.append(param.getYailType()); + sb.append(" "); + sb.append(param.name); + if (++count != parameters.size()) { + sb.append(", "); + } + } + return new String(sb); + } + } + + /** + * Represents an App Inventor event (annotated with {@link SimpleEvent}). + */ + protected final class Event extends ParameterizedFeature + implements Cloneable, Comparable { + // Inherits name, description, and parameters + + protected Event(String name, String description, String longDescription, boolean userVisible, boolean deprecated) { + super(name, description, longDescription, "Event", userVisible, deprecated); + } + + @Override + public Event clone() { + Event that = new Event(name, description, longDescription, userVisible, deprecated); + for (Parameter p : parameters) { + that.addParameter(p.clone()); + } + return that; + } + + @Override + public int compareTo(Event e) { + return name.compareTo(e.name); + } + } + + /** + * Represents an App Inventor component method (annotated with + * {@link SimpleFunction}). + */ + protected final class Method extends ParameterizedFeature + implements Cloneable, Comparable { + /** + * The method's Java return type. Null if the method is a void method. + */ + private TypeMirror returnType; + /** + * The helper key associated with this method's return type. + */ + private HelperKey returnHelperKey; + /** + * Indicate whether this method's return type an integer that represents a + * color. + */ + private boolean color; + + /** + * Indicate whether the method's return should be re-written into a continuation. + */ + private boolean continuation; + + protected Method(String name, String description, String longDescription, boolean userVisible, + boolean deprecated) { + super(name, description, longDescription, "Method", userVisible, deprecated); + } + + /** + * Returns the string representation of this method's Java return type, or null of this method + * is a void method. + */ + protected String getReturnType() { + if (returnType != null) { + return returnType.toString(); + } + return null; + } + + /** + * Returns this method's Yail return type (e.g., "number", "text", "list", etc). + * @return the method's Yail return type. + */ + protected String getYailReturnType() { + return javaTypeToYailType(returnType, continuation); + } + + /** + * Returns the HelperKey associated with the return type of this method, if one exists. Null + * otherwise. + * + * @return the helper key associated with the return type of this method. + */ + protected HelperKey getReturnHelperKey() { + return returnHelperKey; + } + + /** + * Returns true if this method's return type is an integer which represents a color. + * + * @return true if this method's return type is an integer which represents a color. + */ + protected boolean isColor() { + return color; + } + + protected boolean isContinuation() { + return continuation; + } + + @Override + public Method clone() { + Method that = new Method(name, description, longDescription, userVisible, deprecated); + for (Parameter p : parameters) { + that.addParameter(p.clone()); + } + that.returnType = returnType; + that.returnHelperKey = returnHelperKey; + return that; + } + + @Override + public int compareTo(Method f) { + return name.compareTo(f.name); + } + } + + /** + * Represents an App Inventor component property (annotated with + * {@link SimpleProperty}). + */ + protected final class Property extends Feature implements Cloneable { + protected final String name; + private PropertyCategory propertyCategory; + private TypeMirror type; + private boolean readable; + private boolean writable; + private String componentInfoName; + private boolean color; + private HelperKey helper; + + protected Property(String name, String description, String longDescription, + PropertyCategory category, boolean userVisible, boolean deprecated) { + super(name, description, longDescription, "Property", userVisible, deprecated); + this.propertyCategory = category; + this.name = name; + // All other properties can be left as their defaults. + } + + @Override + public Property clone() { + Property that = new Property(name, description, longDescription, propertyCategory, + isUserVisible(), isDeprecated()); + that.type = type; + that.readable = readable; + that.writable = writable; + that.componentInfoName = componentInfoName; + that.color = color; + that.helper = helper; + return that; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(""); + return sb.toString(); + } + + /** + * Returns the description of this property, as retrieved by + * {@link SimpleProperty#description()}. + * + * @return the description of this property + */ + protected String getDescription() { + return description; + } + + /** + * Returns the string representaiton of this property's java type. + * + * @return the string representaiton of this property's java type. + */ + protected String getType() { + // Type should always be non-null. + return type.toString(); + } + + /** + * Returns this property's Yail type (e.g., "number", "text", "list", etc). + * + * @return this property's Yail type (e.g., "number", "text", "list", etc). + */ + protected String getYailType() { + return javaTypeToYailType(type); + } + + /** + * Returns whether this property is readable (has a getter). + * + * @return whether this property is readable + */ + protected boolean isReadable() { + return readable; + } + + /** + * Returns whether this property is writable (has a setter). + * + * @return whether this property is writable + */ + protected boolean isWritable() { + return writable; + } + + protected boolean isColor() { + return color; + } + + /** + * Returns the HelperKey associated with this property, if one exists. Null otherwise. + * @return the HelperKey associated with this property, if one exists. + */ + protected HelperKey getHelperKey() { + return helper; + } + + /** + * Returns a string indicating whether this property is readable and/or + * writable. + * + * @return one of "read-write", "read-only", or "write-only" + * @throws {@link RuntimeException} if the property is neither readable nor + * writable + */ + protected String getRwString() { + if (readable) { + if (writable) { + return READ_WRITE; + } else { + return READ_ONLY; + } + } else { + if (!writable) { + throw new RuntimeException("Property " + name + + " is neither readable nor writable"); + } + return WRITE_ONLY; + } + } + } + + /** + * An enum specifying the available types of helper blocks aka types of helper UI. + * Currently the only type of helper UI is an OPTION_LIST which defines a dropdown UI in the + * blocks editor. This is associated with the OptionList data type, ie OptionList data always has + * an OPTION_LIST style UI in the blocks editor (as of now). + */ + protected enum HelperType { OPTION_LIST, ASSET } + + /** + * A key that allows you to access info about a helper block. + * + *

    This class could be generic, and we could use subtyping to define the different HelperTypes + * but I (Beka) think it makes more sense to make this closely match the JavaScript + * implementation. + */ + protected static final class HelperKey { + private final HelperType helperType; + + private final Object key; + + /** + * Creates a HelperKey which can be used to access data about a helper block. + */ + protected HelperKey(HelperType type, Object key) { + this.helperType = type; + this.key = key; + } + + /** + * Returns the type of helper block, aka the type of helper UI. Eg an option list. + * @return the type of helper block. + */ + protected HelperType getType() { + return helperType; + } + + /** + * Returns the key to the specific helper data. Eg in the case of an option list helper, this + * key could be used to look up values in the optionLists Map. + * If the helper block doesn't need any special data, this can just return null. + * @return key to the helper data. + */ + protected Object getKey() { + return key; + } + } + + + /** + * Represents a list of Options associated with some (enum) class. The data in this OptionList + * is used to create OptionList helper blocks. + * + *

    Here JSON-ified example of such data, in this case we are looking at the Direction enum with + * a default value of East. + * { + * "className": "com.google.appinventor.components.common.Direction", + * "key": "Direction", + * "tag": "Direction", + * "defaultOpt": "East", + * "underlyingType": "java.lang.Integer", + * "options": [ + * { "name": "North", "value": "1", "description": "Option for North", + * "deprecated": "false" }, + * { "name": "Northeast", "value": "2", "description": "Option for Northeast", + * "deprecated": "false" }, + * { "name": "East", "value": "3", "description": "Option for East", + * "deprecated": "false" }, + * { "name": "Southeast", "value": "4", "description": "Option for Southeast", + * "deprecated": "false" }, + * { "name": "South", "value": "-1", "description": "Option for South", + * "deprecated": "false" }, + * { "name": "Southwest", "value": "-2", "description": "Option for Southwest", + * "deprecated": "false" }, + * { "name": "West", "value": "-3", "description": "Option for West", + * "deprecated": "false" }, + * { "name": "Northwest", "value": "-4", "description": "Option for Northwest", + * "deprecated": "false" } + ] + * } + */ + protected final class OptionList { + /** + * A list of option values (Strings) and option info (Options). + * For built-in components the Option name is used to look up the translated display text. + * For extensions, which do not support i18n, the Option name /is/ the display text. + */ + private final ArrayList

      + *
    1. {@link DesignerComponent#designerHelpDescription()}
    2. + *
    3. {@link DesignerComponent#description()}
    4. + *
    5. the Javadoc preceding the beginning of the class corresponding to the component
    6. + *
    + */ + protected String getHelpDescription() { + return helpDescription; + } + + /** + * Custom help URL to documentation for a component (typically an extension) + * + * @return the custom help URL, if any, for the component + */ + protected String getHelpUrl() { + return helpUrl; + } + + /** + * Returns the name of this component's category within the Designer, as displayed + * (for example, "Screen Arrangement"). + * + * @return the name of this component's Designer category + */ + protected String getCategory() { + return category; + } + + /** + * Returns the String representation of the EnumConstant corresponding to this + * component's category within the Designer (for example, "ARRANGEMENTS"). + * Usually, you should use {@link #getCategory()} instead. + * + * @return the EnumConstant representing this component's Designer category + */ + protected String getCategoryString() { + return categoryString; + } + + /** + * Returns the version number of this component, as specified by + * {@link DesignerComponent#version()}. + * + * @return the version number of this component + */ + protected int getVersion() { + return version; + } + + /** + * Returns whether this component is shown on the palette in the Designer, as + * specified by {@link DesignerComponent#showOnPalette()}. + * + * @return whether this component is shown on the Designer palette + */ + protected boolean getShowOnPalette() { + return showOnPalette; + } + + /** + * Returns whether this component is non-visible on the device's screen, as + * specified by {@link DesignerComponent#nonVisible()}. Examples of non-visible + * components are {@link com.google.appinventor.components.runtime.LocationSensor} + * and {@link com.google.appinventor.components.runtime.Clock}. + * + * @return {@code true} if the component is non-visible, {@code false} otherwise + */ + protected boolean getNonVisible() { + return nonVisible; + } + + /** + * Returns whether this component is an external component or not. + * + * @return true if the component is external. false otherwise. + */ + protected boolean getExternal() { + return external; + } + + /** + * Returns the name of the icon file used on the Designer palette, as specified in + * {@link DesignerComponent#iconName()}. + * + * @return the name of the icon file + */ + protected String getIconName() { + return iconName; + } + + /** + * Returns the minimum Android SDK required for the component to run, as specified in + * {@link DesignerComponent#androidMinSdk()}. + * + * @return the minimum Android sdk for the component + */ + protected int getAndroidMinSdk() { + return androidMinSdk; + } + + protected String getVersionName() { + return versionName; + } + + protected String getDateBuilt() { + return dateBuilt; + } + + /** + * Returns the name of the license file used by external components + * {@link DesignerComponent#licenseName()}. + * + * @return the name of the license file + */ + protected String getLicenseName() { + return licenseName; + } + + private String getDisplayNameForComponentType(String componentTypeName) { + // Users don't know what a 'Form' is. They know it as a 'Screen'. + return "Form".equals(componentTypeName) ? "Screen" : componentTypeName; + } + + protected String getName() { + if (name.equals("Form")) { + return "Screen"; + } else { + return name; + } + } + + } + + /** + * Returns the annotations supported by this {@code ComponentProcessor}, namely those related + * to components ({@link com.google.appinventor.components.annotations}). + * + * @return the supported annotations + */ + @Override + public Set getSupportedAnnotationTypes() { + return SUPPORTED_ANNOTATION_TYPES; + } + + @Override + public SourceVersion getSupportedSourceVersion() { + return SourceVersion.RELEASE_7; + } + + @Override + public void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); + elementUtils = processingEnv.getElementUtils(); + typeUtils = processingEnv.getTypeUtils(); + } + + /** + * Processes the component-related annotations ({@link + * com.google.appinventor.components.annotations}), + * populating {@link #components} and initializing {@link #messager} for use within + * {@link #outputResults()}, which is called at the end of this method and must be overriden by + * concrete subclasses. + * + * @param annotations the annotation types requested to be processed + * @param roundEnv environment for information about the current and prior round + * @return {@code true}, indicating that the annotations have been claimed by this processor. + * @see AbstractProcessor#process + */ + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + // This method will be called many times for the source code. + // Only do something on the first pass. + pass++; + if (pass > 1) { + return true; + } + + messager = processingEnv.getMessager(); + + List elements = new ArrayList<>(); + List excludedElements = new ArrayList<>(); + for (TypeElement te : annotations) { + if (te.getSimpleName().toString().equals("DesignerComponent")) { + elements.addAll(roundEnv.getElementsAnnotatedWith(te)); + } else if (te.getSimpleName().toString().equals("SimpleObject")) { + for (Element element : roundEnv.getElementsAnnotatedWith(te)) { + SimpleObject annotation = element.getAnnotation(SimpleObject.class); + if (!annotation.external()) { + elements.add(element); + } else { + excludedElements.add(element); + } + } + } + } + for (Element element : elements) { + processComponent(element); + } + + // Put the component class names (including abstract classes) + componentTypes.addAll(components.keySet()); + for (Element element : excludedElements) { + componentTypes.add(element.asType().toString()); // allow extensions to reference one another + } + + // Remove non-components before calling outputResults. + List removeList = Lists.newArrayList(); + for (Map.Entry entry : components.entrySet()) { + ComponentInfo component = entry.getValue(); + if (component.abstractClass || !component.designerComponent) { + removeList.add(entry.getKey()); + } + } + components.keySet().removeAll(removeList); + + try { + // This is an abstract method implemented in concrete subclasses. + outputResults(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + // We need to return false here so that sibling annotation processors can run + return false; + } + + /* + * This processes an element if it represents a component, reading in its + * information and adding it to components. If this component is a + * subclass of another component, this method recursively calls itself on the + * superclass. + */ + private void processComponent(Element element) { + boolean isForDesigner = element.getAnnotation(DesignerComponent.class) != null; + // If the element is not a component (e.g., Float), return early. + if (element.getAnnotation(SimpleObject.class) == null && !isForDesigner) { + return; + } + + // If we already processed this component, return early. + String longComponentName = ((TypeElement) element).getQualifiedName().toString(); + if (components.containsKey(longComponentName)) { + return; + } + + // Create new ComponentInfo. + ComponentInfo componentInfo = new ComponentInfo(element); + + // Check if this extends another component (DesignerComponent or SimpleObject). + List directSupertypes = typeUtils.directSupertypes(element.asType()); + if (!directSupertypes.isEmpty()) { + // Only look at the first one. Later ones would be interfaces, + // which we don't care about. + String parentName = directSupertypes.get(0).toString(); + Element e = ((DeclaredType) directSupertypes.get(0)).asElement(); + parentName = ((TypeElement) e).getQualifiedName().toString(); + ComponentInfo parentComponent = components.get(parentName); + if (parentComponent == null) { + // Try to process the parent component now. + Element parentElement = elementUtils.getTypeElement(parentName); + if (parentElement != null) { + processComponent(parentElement); + parentComponent = components.get(parentName); + } + } + + // If we still can't find the parent class, we don't care about it, since it's not a + // component (but something like java.lang.Object). Otherwise, we need to copy its + // build info, designer properties, properties, methods, and events. + if (parentComponent != null) { + // Copy its build info, designer properties, properties, methods, and events. + componentInfo.permissions.addAll(parentComponent.permissions); + componentInfo.libraries.addAll(parentComponent.libraries); + componentInfo.nativeLibraries.addAll(parentComponent.nativeLibraries); + componentInfo.assets.addAll(parentComponent.assets); + componentInfo.activities.addAll(parentComponent.activities); + componentInfo.metadata.addAll(parentComponent.metadata); + componentInfo.activityMetadata.addAll(parentComponent.activityMetadata); + componentInfo.broadcastReceivers.addAll(parentComponent.broadcastReceivers); + componentInfo.queries.addAll(parentComponent.queries); + componentInfo.services.addAll(parentComponent.services); + componentInfo.contentProviders.addAll(parentComponent.contentProviders); + // TODO(Will): Remove the following call once the deprecated + // @SimpleBroadcastReceiver annotation is removed. It should + // should remain for the time being because otherwise we'll break + // extensions currently using @SimpleBroadcastReceiver. + componentInfo.classNameAndActionsBR.addAll(parentComponent.classNameAndActionsBR); + // Since we don't modify DesignerProperties, we can just call Map.putAll to copy the + // designer properties from parentComponent to componentInfo. + componentInfo.designerProperties.putAll(parentComponent.designerProperties); + // NOTE(lizlooney) We can't just call Map.putAll to copy the events/properties/methods from + // parentComponent to componentInfo because then each component will share a single + // Event/Property/Method and if one component overrides something about an + // Event/Property/Method, then it will affect all the other components that are sharing + // that Event/Property/Method. + for (Map.Entry entry : parentComponent.events.entrySet()) { + componentInfo.events.put(entry.getKey(), entry.getValue().clone()); + } + for (Map.Entry entry : parentComponent.properties.entrySet()) { + componentInfo.properties.put(entry.getKey(), entry.getValue().clone()); + } + for (Map.Entry entry : parentComponent.methods.entrySet()) { + componentInfo.methods.put(entry.getKey(), entry.getValue().clone()); + } + } + } + + // Gather permissions. + UsesPermissions usesPermissions = element.getAnnotation(UsesPermissions.class); + if (usesPermissions != null) { + for (String permission : usesPermissions.permissionNames().split(",")) { + updateWithNonEmptyValue(componentInfo.permissions, permission); + } + Collections.addAll(componentInfo.permissions, usesPermissions.value()); + } + + // Gather library names. + UsesLibraries usesLibraries = element.getAnnotation(UsesLibraries.class); + if (usesLibraries != null) { + for (String library : usesLibraries.libraries().split(",")) { + updateWithNonEmptyValue(componentInfo.libraries, library); + } + Collections.addAll(componentInfo.libraries, usesLibraries.value()); + } + + // Gather native library names. + UsesNativeLibraries usesNativeLibraries = element.getAnnotation(UsesNativeLibraries.class); + if (usesNativeLibraries != null) { + for (String nativeLibrary : usesNativeLibraries.libraries().split(",")) { + updateWithNonEmptyValue(componentInfo.nativeLibraries, nativeLibrary); + } + for (String v7aLibrary : usesNativeLibraries.v7aLibraries().split(",")) { + updateWithNonEmptyValue(componentInfo.nativeLibraries, v7aLibrary.trim() + ARMEABI_V7A_SUFFIX); + } + for (String v8aLibrary : usesNativeLibraries.v8aLibraries().split(",")) { + updateWithNonEmptyValue(componentInfo.nativeLibraries, v8aLibrary.trim() + ARM64_V8A_SUFFIX); + } + for (String x8664Library : usesNativeLibraries.x86_64Libraries().split(",")) { + updateWithNonEmptyValue(componentInfo.nativeLibraries, x8664Library.trim() + X86_64_SUFFIX); + } + + } + + // Gather required files. + UsesAssets usesAssets = element.getAnnotation(UsesAssets.class); + if (usesAssets != null) { + for (String file : usesAssets.fileNames().split(",")) { + updateWithNonEmptyValue(componentInfo.assets, file); + } + } + + // Gather the required activities and build their element strings. + UsesActivities usesActivities = element.getAnnotation(UsesActivities.class); + if (usesActivities != null) { + try { + for (ActivityElement ae : usesActivities.activities()) { + updateWithNonEmptyValue(componentInfo.activities, activityElementToString(ae)); + } + } catch (IllegalAccessException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + + "activity attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + + "activity attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } + } + + // Gather the required metadata and build their element strings. + UsesApplicationMetadata usesApplicationMetadata = element.getAnnotation(UsesApplicationMetadata.class); + if (usesApplicationMetadata != null) { + try { + for (MetaDataElement me : usesApplicationMetadata.metaDataElements()) { + updateWithNonEmptyValue(componentInfo.metadata, metaDataElementToString(me)); + } + } catch (IllegalAccessException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + + "application metadata and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + + "application metadata and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } + } + + // Gather the required activity metadata and build their element strings. + UsesActivityMetadata usesActivityMetadata = element.getAnnotation(UsesActivityMetadata.class); + if (usesActivityMetadata != null) { + try { + for (MetaDataElement me : usesActivityMetadata.metaDataElements()) { + updateWithNonEmptyValue(componentInfo.activityMetadata, metaDataElementToString(me)); + } + } catch (IllegalAccessException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + + "application metadata and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + + "application metadata and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } + } + + // Gather the required broadcast receivers and build their element strings. + UsesBroadcastReceivers usesBroadcastReceivers = element.getAnnotation(UsesBroadcastReceivers.class); + if (usesBroadcastReceivers != null) { + try { + for (ReceiverElement re : usesBroadcastReceivers.receivers()) { + updateWithNonEmptyValue(componentInfo.broadcastReceivers, receiverElementToString(re)); + } + } catch (IllegalAccessException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + + "broadcast receiver attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + + "broadcast receiver attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } + } + + // Gather the required queries and build their element strings. + UsesQueries usesQueries = element.getAnnotation(UsesQueries.class); + if (usesQueries != null) { + try { + for (String packageName : usesQueries.packageNames()) { + componentInfo.queries.add(""); + } + for (IntentFilterElement intent : usesQueries.intents()) { + updateWithNonEmptyValue(componentInfo.queries, intentFilterElementToIntentString(intent)); + } + for (ProviderElement provider : usesQueries.providers()) { + updateWithNonEmptyValue(componentInfo.queries, providerElementToString(provider)); + } + } catch (IllegalAccessException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + + "service attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + + "service attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } + } + + // Gather the required services and build their element strings. + UsesServices usesServices = element.getAnnotation(UsesServices.class); + if (usesServices != null) { + try { + for (ServiceElement se : usesServices.services()) { + updateWithNonEmptyValue(componentInfo.services, serviceElementToString(se)); + } + } catch (IllegalAccessException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + + "service attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + + "service attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } + } + + // Gather the required content providers and build their element strings. + UsesContentProviders usesContentProviders = element.getAnnotation(UsesContentProviders.class); + if (usesContentProviders != null) { + try { + for (ProviderElement pe : usesContentProviders.providers()) { + updateWithNonEmptyValue(componentInfo.contentProviders, providerElementToString(pe)); + } + } catch (IllegalAccessException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + + "provider attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + + "provider attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } + } + + // TODO(Will): Remove the following legacy code once the deprecated + // @SimpleBroadcastReceiver annotation is removed. It should + // should remain for the time being because otherwise we'll break + // extensions currently using @SimpleBroadcastReceiver. + // + // Gather required actions for legacy Broadcast Receivers. The annotation + // has a Class Name and zero or more Filter Actions. In the + // resulting String, Class name will go first, and each Action + // will be added, separated by a comma. + + SimpleBroadcastReceiver simpleBroadcastReceiver = element.getAnnotation(SimpleBroadcastReceiver.class); + if (simpleBroadcastReceiver != null) { + for (String className : simpleBroadcastReceiver.className().split(",")){ + StringBuffer nameAndActions = new StringBuffer(); + nameAndActions.append(className.trim()); + for (String action : simpleBroadcastReceiver.actions().split(",")) { + nameAndActions.append("," + action.trim()); + } + componentInfo.classNameAndActionsBR.add(nameAndActions.toString()); + break; // We only need one class name; If more than one is passed, ignore all but first. + } + } + + // Build up event information. + processEvents(componentInfo, element); + + // Build up property information. + processProperties(componentInfo, element); + + // Build up method information. + processMethods(componentInfo, element); + + if (isForDesigner) { + processDescriptions(componentInfo); + } + + // Add it to our components map. + components.put(longComponentName, componentInfo); + } + + private void processDescriptions(ComponentInfo info) { + final String name = info.displayName; + info.description = info.description.replaceAll(TYPE_PLACEHOLDER, name); + info.helpUrl = info.helpUrl.replaceAll(TYPE_PLACEHOLDER, name); + for (Property property : info.properties.values()) { + property.description = property.description.replaceAll(TYPE_PLACEHOLDER, name); + } + for (Event event : info.events.values()) { + event.description = event.description.replaceAll(TYPE_PLACEHOLDER, name); + } + for (Method method : info.methods.values()) { + method.description = method.description.replaceAll(TYPE_PLACEHOLDER, name); + } + } + + private boolean isPublicMethod(Element element) { + return element.getModifiers().contains(Modifier.PUBLIC) + && element.getKind() == ElementKind.METHOD; + } + + private Property executableElementToProperty(Element element, String componentInfoName) { + String propertyName = element.getSimpleName().toString(); + SimpleProperty simpleProperty = element.getAnnotation(SimpleProperty.class); + + if (!(element.asType() instanceof ExecutableType)) { + throw new RuntimeException("element.asType() is not an ExecutableType for " + + propertyName); + } + + // Use Javadoc for property unless description is set to a non-empty string. + String description = elementUtils.getDocComment(element); + String longDescription = description; + if (!simpleProperty.description().isEmpty()) { + description = simpleProperty.description(); + } + if (description == null) { + description = ""; + } + // Read only until the first javadoc parameter + description = description.split("[^\\\\][@{]")[0].trim(); + + Property property = new Property(propertyName, + description, + longDescription, + simpleProperty.category(), + simpleProperty.userVisible(), + elementUtils.isDeprecated(element)); + + // Get parameters to tell if this is a getter or setter. + ExecutableType executableType = (ExecutableType) element.asType(); + List parameters = executableType.getParameterTypes(); + + // Check if it is a setter or getter, and set the property's readable, writable, + // and type fields appropriately. + TypeMirror typeMirror; + if (parameters.size() == 0) { + // It is a getter. + property.readable = true; + typeMirror = executableType.getReturnType(); + if (typeMirror.getKind().equals(TypeKind.VOID)) { + throw new RuntimeException("Property method is void and has no parameters: " + + propertyName); + } + property.helper = elementToHelperKey(element, ((ExecutableElement)element).getReturnType()); + if (element.getAnnotation(IsColor.class) != null) { + property.color = true; + } + } else { + // It is a setter. + property.writable = true; + if (parameters.size() != 1) { + throw new RuntimeException("Too many parameters for setter for " + + propertyName); + } + typeMirror = parameters.get(0); + Element param = ((ExecutableElement) element).getParameters().get(0); + property.helper = elementToHelperKey(param, param.asType()); + for (VariableElement ve : ((ExecutableElement) element).getParameters()) { + if (ve.getAnnotation(IsColor.class) != null) { + property.color = true; + } + } + } + + // Use typeMirror to set the property's type. + if (!typeMirror.getKind().equals(TypeKind.VOID)) { + property.type = typeMirror; + updateComponentTypes(typeMirror); + } + + property.componentInfoName = componentInfoName; + + return property; + } + + /** + * Converts an element representing a function (for return types) or a parameter into a HelperKey. + * + * @param elem the Element which represents a function (for return types) or a parameter. + * @param type the TypeMirror representing the type of that element. + * @return The created HelperKey if the element does indeed define a helper, null otherwise. + */ + private HelperKey elementToHelperKey(Element elem, TypeMirror type) { + HelperKey key; + key = hasOptionListHelper(elem, type); + if (key != null) { + return key; + } + key = hasAssetsHelper(elem, type); + if (key != null) { + return key; + } + // Add more possibilities here. + return null; + } + + /** + * Returns the associated helper key if the element has an OptionList associated with it. + * Null otherwise. + * + * @param elem the Element which represents a function (for return types) or a parameter. + * @param type the TypeMirror representing the type of that element. + * @return the associated helper key if the element has an OptionList assciated with it. + */ + private HelperKey hasOptionListHelper(Element elem, TypeMirror type) { + // Check if the elem type is an OptionList + if (isOptionList(type)) { + return optionListToHelperKey(((DeclaredType) type).asElement()); + } + + // Check if the elem has an @Options annotation. + // This is the backwards compat method for getting OptionLists. + for (AnnotationMirror mirror : elem.getAnnotationMirrors()) { + // Make sure we are dealing with an Options annotation. + if (!mirror.getAnnotationType().asElement().getSimpleName().contentEquals("Options")) { + continue; + } + for (Entry entry: + mirror.getElementValues().entrySet()) { + // Make sure we are looking at the value argument. + if (!entry.getKey().getSimpleName().contentEquals("value")) { + continue; + } + // Get the AnnotationValue's value. So we are now looking at the + // class passed to the @Options annotation. + Element optionList = ((DeclaredType)entry.getValue().getValue()).asElement(); + return optionListToHelperKey(optionList); + } + } + return null; + } + + /** + * Returns true if the given type implements OptionList. False otherwise. + * @param type the type to check if it implements OptionList. + * @return true if the given type implements OptionList. False otherwise. + */ + private boolean isOptionList(TypeMirror type) { + if (type.getKind() == TypeKind.DECLARED) { + TypeElement elem = (TypeElement)((DeclaredType)type).asElement(); + for (TypeMirror parent : elem.getInterfaces()) { + TypeElement parentElem = (TypeElement)((DeclaredType)parent).asElement(); + if (parentElem.getSimpleName().toString().equals("OptionList")) { + return true; + } + } + } + return false; + } + + /** + * Returns the OptionList HelperKey associated with the given element. + * @param optionList the Element describing a class which implements the OptionList interface. + * @return the HelperKey associated with the given element. + */ + private HelperKey optionListToHelperKey(Element optionList) { + String name = optionList.getSimpleName().toString(); + // We haven't seen this type of option list before, so add it. + if (optionLists.get(name) == null) { + if (!tryAddOptionList(optionList)) { + // Couldn't add it for whatever reason. + return null; + } + } + // This helper key is storing info about an OptionList. + return new HelperKey(HelperType.OPTION_LIST, name); + } + + /** + * Adds a new OptionList (based on the passed option list element) to the optionLists list. + * + * @param optionElem The element representing the enum defining the options. + * @return Returns true if the Optionlist was successfully added. False otherwise. + */ + private boolean tryAddOptionList(Element optionElem) { + String className = optionElem.asType().toString(); + String tagName = optionElem.getSimpleName().toString(); + OptionList optionList = new OptionList(className, tagName); + + // Get the class. + Class clazz; + try { + clazz = Class.forName(className); + } catch (ClassNotFoundException e) { + throw new IllegalArgumentException("OptionList Class: " + className + " is not available. " + + "Make sure that it is available to the compiler."); + } + + // Get the getValue method. + java.lang.reflect.Method toValueMethod; + try { + toValueMethod = clazz.getDeclaredMethod("toUnderlyingValue"); + } catch (NoSuchMethodException e) { + throw new IllegalArgumentException("Class: " + className + " must have a toUnderlyingValue() " + + "method."); + } + + // Get the "fromUnderlyingValue" static method if this class falls under the "com.google.appinventor.components" + // package. We don't use this method here, but we require the built-in helpers to have it for providing backward + // compatibility. + final PackageElement packageElem = processingEnv.getElementUtils().getPackageOf(optionElem); + if (packageElem.getQualifiedName().toString().startsWith("com.google.appinventor.components.")) { + java.lang.reflect.Method fromValueMethod; + Type genericType = null; + try { + ParameterizedType optionListType = (ParameterizedType) clazz.getGenericInterfaces()[0]; + genericType = optionListType.getActualTypeArguments()[0]; + Class typeClass = (Class) genericType; + fromValueMethod = clazz.getDeclaredMethod("fromUnderlyingValue", typeClass); + } catch (NoSuchMethodException e) { + throw new IllegalArgumentException("Class: " + className + " must have a static " + + "fromUnderlyingValue(" + genericType.getTypeName() + ") method."); + } + if (!java.lang.reflect.Modifier.isStatic(fromValueMethod.getModifiers())) { + throw new IllegalArgumentException("Class: " + className + " must have a static " + + "fromUnderlyingValue(" + genericType.getTypeName() + ") method."); + } + } + + // Create a map of enum const names -> values. This is used to filter the below elements + // returned by getEnclosedElements(). + Map namesToValues = Maps.newTreeMap(); + Object[] constants = clazz.getEnumConstants(); + if (constants == null) { + throw new IllegalArgumentException("Class: " + className + " should be an enum and declare " + + "enum constants."); + } + for (Object constant : constants) { + try { + Enum enumConst = (Enum) constant; + namesToValues.put(enumConst.name(), toValueMethod.invoke(enumConst).toString()); + } catch (Exception e) { + // pass + } + } + + // Add the options to the OptionList. + // Note that getEnclosedElements() returns not only enum constants but also method and field + // names, so we need to filter those out using namesToValues. + for (Element field : optionElem.getEnclosedElements()) { + String fieldName = field.getSimpleName().toString(); + if (namesToValues.containsKey(fieldName)) { + String value = namesToValues.get(fieldName); + optionList.addOption(elementToOption(field, value)); + + // Set the default to be the first option, or the option tagged with @Default. + if (optionList.getDefault() == null || isDefault(field)) { + optionList.setDefault(fieldName); + } + } + } + + DeclaredType optionListInterface = (DeclaredType)((TypeElement)optionElem) + .getInterfaces().get(0); + optionList.setUnderlyingType(optionListInterface.getTypeArguments().get(0)); + + if (!optionList.isEmpty()) { + optionLists.put(optionElem.getSimpleName().toString(), optionList); + } + + return !optionList.isEmpty(); + } + + /** + * Returns true if the leement is tagged with the @Default annotation. + * @return true if the element is tagged with the @Default annotation. + */ + private boolean isDefault(Element field) { + for (AnnotationMirror mirror : field.getAnnotationMirrors()) { + if (mirror.getAnnotationType().asElement().getSimpleName().contentEquals("Default")) { + return true; + } + } + return false; + } + + /** + * Converts an Element into an Option. + * @param field the field to convert into an option. + * @param value the backing value associated with that field. + * @return the option constructed from the field and value. + */ + private Option elementToOption(Element field, String value) { + // TODO: getDocComment doesn't seem to work on enum constants? + String description = elementUtils.getDocComment(field); + if (description == null) { + description = ""; + } + // Read only until the first javadoc parameter + description = description.split("[^\\\\][@{]")[0].trim(); + + return new Option( + field.getSimpleName().toString(), + value, + description, + elementUtils.isDeprecated(field) + ); + } + + /** + * Returns the associated helper key if the element has an @Asset annotation. Null otherwise. + * + * @param elem the Element which represents a function (for return types) or a parameter. + * @param type the TypeMirror representing the type of that element. + * @return the associated helper key if the element has an @Asset annotation. + */ + private HelperKey hasAssetsHelper(Element elem, TypeMirror type) { + for (AnnotationMirror mirror : elem.getAnnotationMirrors()) { + if (mirror.getAnnotationType().asElement().getSimpleName().contentEquals("Asset")) { + int index = 0; // Index 0 is the empty filter. + for (Entry entry : + mirror.getElementValues().entrySet()) { + // Make sure we are looking at the value attribute. + if (!entry.getKey().getSimpleName().contentEquals("value")) { + continue; + } + List values = (List) entry.getValue().getValue(); + List filter = new ArrayList(); + for (AnnotationValue v : values) { + filter.add(((String)v.getValue()).toLowerCase()); + } + Collections.sort(filter); + if (!filters.contains(filter)) { + filters.add(filter); + } + index = filters.indexOf(filter); + } + return new HelperKey(HelperType.ASSET, index); + } + } + return null; + } + + /** + * Converts a VariableElement into a Parameter definition. + * @param varElem the element to convert. + * @return the parameter constructed from the variable element. + */ + private Parameter varElemToParameter(VariableElement varElem) { + TypeMirror type = varElem.asType(); + if (type instanceof DeclaredType && ((DeclaredType) type).asElement().toString() + .equals("com.google.appinventor.components.runtime.util.Continuation")) { + Continuation continuation = new Continuation(varElem.getSimpleName().toString(), type, + varElem.getAnnotation(IsColor.class) != null); + continuation.helper = elementToHelperKey(varElem, varElem.asType()); + return continuation; + } else { + Parameter param = new Parameter(varElem.getSimpleName().toString(), type, + varElem.getAnnotation(IsColor.class) != null); + param.helper = elementToHelperKey(varElem, varElem.asType()); + return param; + } + } + + // Transform an @ActivityElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String activityElementToString(ActivityElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // receiver element attributes. + StringBuilder elementString = new StringBuilder(" \\n"); + + // Now, we collect any subelements. + elementString.append(subelementsToString(element.metaDataElements())); + elementString.append(subelementsToString(element.intentFilters())); + + // Finally, we close the element and create its String. + return elementString.append(" \\n").toString(); + } + + // Transform a @ReceiverElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String receiverElementToString(ReceiverElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // receiver element attributes. + StringBuilder elementString = new StringBuilder(" \\n"); + + // Now, we collect any subelements. + elementString.append(subelementsToString(element.metaDataElements())); + elementString.append(subelementsToString(element.intentFilters())); + + // Finally, we close the element and create its String. + return elementString.append(" \\n").toString(); + } + + // Transform a @ServiceElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String serviceElementToString(ServiceElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // service element attributes. + StringBuilder elementString = new StringBuilder(" \\n"); + + // Now, we collect any subelements. + elementString.append(subelementsToString(element.metaDataElements())); + elementString.append(subelementsToString(element.intentFilters())); + + // Finally, we close the element and create its String. + return elementString.append(" \\n").toString(); + } + + // Transform a @ProviderElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String providerElementToString(ProviderElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // content provider element attributes. + StringBuilder elementString = new StringBuilder(" \\n"); + + // Now, we collect any subelements. + elementString.append(subelementsToString(element.metaDataElements())); + elementString.append(subelementsToString(element.pathPermissionElement())); + elementString.append(subelementsToString(element.grantUriPermissionElement())); + + // Finally, we close the element and create its String. + return elementString.append(" \\n").toString(); + } + + // Transform a @MetaDataElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String metaDataElementToString(MetaDataElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // receiver element attributes. + StringBuilder elementString = new StringBuilder(" element and create its String. + return elementString.append("/>\\n").toString(); + } + + // Transform an @IntentFilterElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String intentFilterElementToString(IntentFilterElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // receiver element attributes. + StringBuilder elementString = new StringBuilder(" \\n"); + + // Now, we collect any subelements. + elementString.append(subelementsToString(element.actionElements())); + elementString.append(subelementsToString(element.categoryElements())); + elementString.append(subelementsToString(element.dataElements())); + + // Finally, we close the element and create its String. + return elementString.append(" \\n").toString(); + } + + private static String intentFilterElementToIntentString(IntentFilterElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // receiver element attributes. + StringBuilder elementString = new StringBuilder(" \\n"); + + // Now, we collect any subelements. + elementString.append(subelementsToString(element.actionElements())); + elementString.append(subelementsToString(element.categoryElements())); + elementString.append(subelementsToString(element.dataElements())); + + // Finally, we close the element and create its String. + return elementString.append(" \\n").toString(); + } + + // Transform an @ActionElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String actionElementToString(ActionElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // receiver element attributes. + StringBuilder elementString = new StringBuilder(" element and create its String. + return elementString.append("/>\\n").toString(); + } + + // Transform a @CategoryElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String categoryElementToString(CategoryElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // receiver element attributes. + StringBuilder elementString = new StringBuilder(" element and create its String. + return elementString.append("/>\\n").toString(); + } + + // Transform a @DataElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String dataElementToString(DataElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // receiver element attributes. + StringBuilder elementString = new StringBuilder(" element and create its String. + return elementString.append("/>\\n").toString(); + } + + // Transform a @PathPermissionElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String pathPermissionElementToString(PathPermissionElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // receiver element attributes. + StringBuilder elementString = new StringBuilder(" element and create its String. + return elementString.append("/>\\n").toString(); + } + + // Transform a @GrantUriPermissionElement into an XML element String for use later + // in creating AndroidManifest.xml. + private static String grantUriPermissionElementToString(GrantUriPermissionElement element) + throws IllegalAccessException, InvocationTargetException { + // First, we build the element's opening tag including any + // receiver element attributes. + StringBuilder elementString = new StringBuilder(" element and create its String. + return elementString.append("/>\\n").toString(); + } + + // Build the attribute String for a given XML element modeled by an + // annotation. + // + // Note that we use the fully qualified names for certain classes in the + // "java.lang.reflect" package to avoid namespace collisions. + private static String elementAttributesToString(Annotation element) + throws IllegalAccessException, InvocationTargetException { + StringBuilder attributeString = new StringBuilder(""); + Class clazz = element.annotationType(); + java.lang.reflect.Method[] methods = clazz.getDeclaredMethods(); + String attributeSeparator = ""; + for (java.lang.reflect.Method method : methods) { + int modCode = method.getModifiers(); + if (java.lang.reflect.Modifier.isPublic(modCode) + && !java.lang.reflect.Modifier.isStatic(modCode)) { + if (method.getReturnType().getSimpleName().equals("String")) { + // It is an XML element attribute. + String attributeValue = (String) method.invoke(clazz.cast(element)); + if (!attributeValue.equals("")) { + attributeString.append(attributeSeparator); + attributeString.append("android:"); + attributeString.append(method.getName()); + attributeString.append("=\\\""); + attributeString.append(attributeValue); + attributeString.append("\\\""); + attributeSeparator = " "; + } + } + } + } + return attributeString.toString(); + } + + // Build the subelement String for a given array of XML elements modeled by + // corresponding annotations. + private static String subelementsToString(Annotation[] subelements) + throws IllegalAccessException, InvocationTargetException { + StringBuilder subelementString = new StringBuilder(""); + for (Annotation subelement : subelements) { + if (subelement instanceof MetaDataElement) { + subelementString.append(metaDataElementToString((MetaDataElement) subelement)); + } else if (subelement instanceof IntentFilterElement) { + subelementString.append(intentFilterElementToString((IntentFilterElement) subelement)); + } else if (subelement instanceof ActionElement) { + subelementString.append(actionElementToString((ActionElement) subelement)); + } else if (subelement instanceof CategoryElement) { + subelementString.append(categoryElementToString((CategoryElement) subelement)); + } else if (subelement instanceof DataElement) { + subelementString.append(dataElementToString((DataElement) subelement)); + } else if (subelement instanceof PathPermissionElement) { + subelementString.append(pathPermissionElementToString((PathPermissionElement) subelement)); + } else if (subelement instanceof GrantUriPermissionElement) { + subelementString.append(grantUriPermissionElementToString((GrantUriPermissionElement) subelement)); + } + } + return subelementString.toString(); + } + + private void processProperties(ComponentInfo componentInfo, + Element componentElement) { + // We no longer support properties that use the variant type. + + Map propertyElementsToCheck = new HashMap<>(); + + for (Element element : componentElement.getEnclosedElements()) { + if (!isPublicMethod(element)) { + continue; + } + + // Get the name of the prospective property. + String propertyName = element.getSimpleName().toString(); + processConditionalAnnotations(componentInfo, element, propertyName); + + // Designer property information + DesignerProperty designerProperty = element.getAnnotation(DesignerProperty.class); + if (designerProperty != null) { + componentInfo.designerProperties.put(propertyName, designerProperty); + propertyElementsToCheck.put(propertyName, element); + } + + // If property is overridden without again using SimpleProperty, remove + // it. For example, this is done for Ball.Width(), which overrides the + // inherited property Width() because Ball uses Radius() instead. + if (element.getAnnotation(SimpleProperty.class) == null) { + if (componentInfo.properties.containsKey(propertyName)) { + // Look at the prior property's componentInfoName. + Property priorProperty = componentInfo.properties.get(propertyName); + if (priorProperty.componentInfoName.equals(componentInfo.name)) { + // The prior property's componentInfoName is the same as this componentInfo's name. + // This is just a read-only or write-only property. We don't need to do anything + // special here. + } else { + // The prior property's componentInfoName is the different than this componentInfo's + // name. This is an overridden property without the SimpleProperty annotation and we + // need to remove it. + componentInfo.properties.remove(propertyName); + } + } + } else { + // Create a new Property element, then compare and combine it with any + // prior Property element with the same property name, verifying that + // they are consistent. + Property newProperty = executableElementToProperty(element, componentInfo.name); + if (designerProperty != null + && designerProperty.editorType().equals(PropertyTypeConstants.PROPERTY_TYPE_COLOR)) { + // Properties that use a color editor should be marked as a color property + newProperty.color = true; + } + + if (componentInfo.properties.containsKey(propertyName)) { + Property priorProperty = componentInfo.properties.get(propertyName); + + if (!priorProperty.type.equals(newProperty.type)) { + // If the getter type is different than the setter type, set the type to getter. + // If we have multiple setters with different types, throw an error. + if (newProperty.readable) { + priorProperty.type = newProperty.type; + } else if (priorProperty.writable) { + // TODO(user): handle lang_def and document generation for multiple setters. + throw new RuntimeException("Inconsistent types " + priorProperty.type + + " and " + newProperty.type + " for property " + + propertyName + " in component " + componentInfo.name); + } + } + + // TODO: Should this be moved into the Property class? This was tricky for me to discover. + // Merge newProperty into priorProperty, which is already in the properties map. + if ((priorProperty.description.isEmpty() || priorProperty.isDefaultDescription() + || element.getAnnotation(Override.class) != null) + && !newProperty.description.isEmpty() && !newProperty.isDefaultDescription()) { + priorProperty.setDescription(newProperty.description); + } + if (!newProperty.longDescription.isEmpty() && !newProperty.isDefaultDescription()) { /* Latter descriptions of the same property override earlier descriptions. */ + priorProperty.longDescription = newProperty.longDescription; + } + + if (priorProperty.propertyCategory == PropertyCategory.UNSET) { + priorProperty.propertyCategory = newProperty.propertyCategory; + } else if (newProperty.propertyCategory != priorProperty.propertyCategory && + newProperty.propertyCategory != PropertyCategory.UNSET) { + throw new RuntimeException( + "Property " + propertyName + " has inconsistent categories " + + priorProperty.propertyCategory + " and " + + newProperty.propertyCategory + " in component " + + componentInfo.name); + } + if (priorProperty.helper == null) { + priorProperty.helper = newProperty.helper; + } + priorProperty.readable = priorProperty.readable || newProperty.readable; + priorProperty.writable = priorProperty.writable || newProperty.writable; + priorProperty.userVisible = priorProperty.isUserVisible() && newProperty.isUserVisible(); + priorProperty.deprecated = priorProperty.isDeprecated() && newProperty.isDeprecated(); + priorProperty.componentInfoName = componentInfo.name; + priorProperty.color = newProperty.color || priorProperty.color; + } else { + // Add the new property to the properties map. + componentInfo.properties.put(propertyName, newProperty); + } + } + } + + // Verify that every DesignerComponent has a corresponding property entry. A mismatch results + // in App Inventor being unable to generate code for the designer since the type information + // is in the block property only. We check that the designer property name is also present + // in the block properties. If not, an error is reported and the build terminates. + Set propertyNames = new HashSet<>(componentInfo.designerProperties.keySet()); + propertyNames.removeAll(componentInfo.properties.keySet()); + if (!propertyNames.isEmpty()) { + for (String propertyName : propertyNames) { + messager.printMessage(Kind.ERROR, + String.format(MISSING_SIMPLE_PROPERTY_ANNOTATION, propertyName), + propertyElementsToCheck.get(propertyName)); + } + } + } + + // Note: The top halves of the bodies of processEvent() and processMethods() + // are very similar. I tried refactoring in several ways but it just made + // things more complex. + private void processEvents(ComponentInfo componentInfo, + Element componentElement) { + for (Element element : componentElement.getEnclosedElements()) { + if (!isPublicMethod(element)) { + continue; + } + + // Get the name of the prospective event. + String eventName = element.getSimpleName().toString(); + processConditionalAnnotations(componentInfo, element, eventName); + + SimpleEvent simpleEventAnnotation = element.getAnnotation(SimpleEvent.class); + + // Remove overriden events unless SimpleEvent is again specified. + // See comment in processProperties for an example. + if (simpleEventAnnotation == null) { + if (componentInfo.events.containsKey(eventName)) { + componentInfo.events.remove(eventName); + } + } else { + String eventDescription = simpleEventAnnotation.description(); + String longEventDescription = elementUtils.getDocComment(element); + if (eventDescription.isEmpty()) { + eventDescription = longEventDescription; + if (eventDescription == null) { + messager.printMessage(Diagnostic.Kind.WARNING, + "In component " + componentInfo.name + + ", event " + eventName + + " is missing a description."); + eventDescription = ""; + } + } + boolean userVisible = simpleEventAnnotation.userVisible(); + boolean deprecated = elementUtils.isDeprecated(element); + Event event = new Event(eventName, eventDescription, longEventDescription, userVisible, deprecated); + componentInfo.events.put(event.name, event); + + // Verify that this element has an ExecutableType. + if (!(element instanceof ExecutableElement)) { + throw new RuntimeException("In component " + componentInfo.name + + ", the representation of SimpleEvent " + eventName + + " does not implement ExecutableElement."); + } + ExecutableElement e = (ExecutableElement) element; + + // Extract the parameters. + for (VariableElement ve : e.getParameters()) { + event.addParameter(varElemToParameter(ve)); + updateComponentTypes(ve.asType()); + } + } + } + } + + private void processMethods(ComponentInfo componentInfo, Element componentElement) { + for (Element element : componentElement.getEnclosedElements()) { + if (!isPublicMethod(element)) { + continue; + } + + // Get the name of the prospective method. + String methodName = element.getSimpleName().toString(); + processConditionalAnnotations(componentInfo, element, methodName); + + SimpleFunction simpleFunctionAnnotation = element.getAnnotation(SimpleFunction.class); + + // Remove overriden methods unless SimpleFunction is again specified. + // See comment in processProperties for an example. + if (simpleFunctionAnnotation == null) { + if (componentInfo.methods.containsKey(methodName)) { + componentInfo.methods.remove(methodName); + } + } else { + String methodLongDescription = elementUtils.getDocComment(element); + String methodDescription = simpleFunctionAnnotation.description(); + if (methodDescription.isEmpty()) { + methodDescription = methodLongDescription; + if (methodDescription == null) { + messager.printMessage(Diagnostic.Kind.WARNING, + "In component " + componentInfo.name + + ", method " + methodName + + " is missing a description."); + methodDescription = ""; + } + } + boolean userVisible = simpleFunctionAnnotation.userVisible(); + boolean deprecated = elementUtils.isDeprecated(element); + Method method = new Method(methodName, methodDescription, methodLongDescription, userVisible, deprecated); + componentInfo.methods.put(method.name, method); + + // Verify that this element has an ExecutableType. + if (!(element instanceof ExecutableElement)) { + throw new RuntimeException("In component " + componentInfo.name + + ", the representation of SimpleFunction " + methodName + + " does not implement ExecutableElement."); + } + ExecutableElement e = (ExecutableElement) element; + + // Extract the parameters. + Continuation continuation = null; + for (VariableElement ve : e.getParameters()) { + Parameter p = varElemToParameter(ve); + if (p instanceof Continuation) { + if (continuation != null) { + messager.printMessage(Kind.ERROR, "A method can have at most one continuation", + element); + } else { + continuation = (Continuation) p; + } + } else { + method.addParameter(p); + } + updateComponentTypes(ve.asType()); + } + + // Extract the return type. + if (e.getReturnType().getKind() != TypeKind.VOID) { + if (continuation != null) { + messager.printMessage(Kind.ERROR, "Methods with a continuation must be void.", + element); + } + method.returnType = e.getReturnType(); + method.returnHelperKey = elementToHelperKey(e, method.returnType); + if (e.getAnnotation(IsColor.class) != null) { + method.color = true; + } + updateComponentTypes(e.getReturnType()); + } else if (continuation != null) { + method.continuation = true; + if (!((DeclaredType) continuation.underlyingType).toString().equals("java.lang.Void")) { + method.returnType = continuation.underlyingType; + } + } + } + } + } + + /** + * Processes the conditional annotations for a component into a dictionary + * mapping blocks to those annotations. + * + * @param componentInfo Component info in which to store the conditional information. + * @param element The currently processed Java language element. This should be a method + * annotated with either @UsesPermission, @UsesBroadcastReceivers, @UsesServices or @UsesContentProviders + * @param blockName The name of the block as it appears in the sources. + */ + private void processConditionalAnnotations(ComponentInfo componentInfo, Element element, + String blockName) { + // Conditional UsesPermissions + UsesPermissions usesPermissions = element.getAnnotation(UsesPermissions.class); + if (usesPermissions != null) { + componentInfo.conditionalPermissions.put(blockName, usesPermissions.value()); + } + + UsesBroadcastReceivers broadcastReceiver = element.getAnnotation(UsesBroadcastReceivers.class); + if (broadcastReceiver != null) { + try { + Set receivers = new HashSet<>(); + for (ReceiverElement re : broadcastReceiver.receivers()) { + updateWithNonEmptyValue(receivers, receiverElementToString(re)); + } + componentInfo.conditionalBroadcastReceivers.put(blockName, receivers.toArray(new String[0])); + } catch (Exception e) { + messager.printMessage(Kind.ERROR, "Unable to process broadcast receiver", element); + } + } + + // Gather the required queries and build their element strings. + UsesQueries usesQueries = element.getAnnotation(UsesQueries.class); + if (usesQueries != null) { + try { + Set queries = new HashSet<>(); + for (String packageName : usesQueries.packageNames()) { + updateWithNonEmptyValue(queries, ""); + } + for (IntentFilterElement intent : usesQueries.intents()) { + updateWithNonEmptyValue(queries, intentFilterElementToIntentString(intent)); + } + for (ProviderElement provider : usesQueries.providers()) { + updateWithNonEmptyValue(queries, providerElementToString(provider)); + } + componentInfo.conditionalQueries.put(blockName, queries.toArray(new String[0])); + } catch (IllegalAccessException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "IllegalAccessException when gathering " + + "service attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + messager.printMessage(Diagnostic.Kind.ERROR, "InvocationTargetException when gathering " + + "service attributes and subelements for component " + componentInfo.name); + throw new RuntimeException(e); + } + } + + UsesServices service = element.getAnnotation(UsesServices.class); + if (service != null) { + try { + Set services = new HashSet<>(); + for (ServiceElement se : service.services()) { + updateWithNonEmptyValue(services, serviceElementToString(se)); + } + componentInfo.conditionalServices.put(blockName, services.toArray(new String[0])); + } catch (Exception e) { + messager.printMessage(Kind.ERROR, "Unable to process service", element); + } + } + + UsesContentProviders contentProvider = element.getAnnotation(UsesContentProviders.class); + if (contentProvider != null) { + try { + Set providers = new HashSet<>(); + for (ProviderElement pe : contentProvider.providers()) { + updateWithNonEmptyValue(providers, providerElementToString(pe)); + } + componentInfo.conditionalContentProviders.put(blockName, providers.toArray(new String[0])); + } catch (Exception e) { + messager.printMessage(Kind.ERROR, "Unable to process content provider", element); + } + } + } + + /** + *

    Outputs the required component information in the desired format. It is called by + * {@link #process} after the fields {@link #components} and {@link #messager} + * have been populated.

    + * + *

    Implementations of this methods should call {@link #getOutputWriter(String)} to obtain a + * {@link Writer} for their output. Diagnostic messages should be written + * using {@link #messager}.

    + */ + protected abstract void outputResults() throws IOException; + + /** + * Returns the appropriate Yail type for a given Java type. + * + * @param type a TypeMirror representing the Java type. + * @return the equivalent Yail type. All component names are converted to "component". + * @throws RuntimeException if the parameter cannot be mapped to any of the + * legal return values + */ + protected final String javaTypeToYailType(TypeMirror type) { + return javaTypeToYailType(type, false); + } + + protected final String javaTypeToYailType(TypeMirror type, boolean allowBoxed) { + if (!allowBoxed && BOXED_TYPES.containsKey(type.toString())) { + throw new IllegalArgumentException(String.format(BOXED_TYPE_ERROR, type, + BOXED_TYPES.get(type.toString()))); + } else if (allowBoxed && BOXED_TYPES.containsKey(type.toString())) { + return BOXED_TYPES.get(type.toString()); + } + + // Handle enums + if (isOptionList(type)) { + // In YAIL code generation we need any easy way to test if a type symbol, represents an + // abstract option type. We have chosen to do this by having each type end with "Enum". For + // example, if you have a parameter that accepts a Direction the type symbol passed to Yail + // would be 'com.google.appinventor.components.common.DirectionEnum. + return type.toString() + "Enum"; + } + + String typeString = type.toString(); + // boolean -> boolean + if (typeString.equals("boolean")) { + return typeString; + } + // String -> text + if (typeString.equals("java.lang.String")) { + return "text"; + } + // {float, double, int, short, long, byte} -> number + if (typeString.equals("float") || typeString.equals("double") || typeString.equals("int") + || typeString.equals("short") || typeString.equals("long") || typeString.equals("byte")) { + return "number"; + } + // YailList -> list + if (typeString.equals("com.google.appinventor.components.runtime.util.YailList")) { + return "list"; + } + // List -> list + if (typeString.startsWith("java.util.List")) { + return "list"; + } + if (typeString.equals("com.google.appinventor.components.runtime.util.YailDictionary")) { + return "dictionary"; + } + if (typeString.equals("com.google.appinventor.components.runtime.util.YailObject")) { + return "yailobject"; + } + + // Calendar -> InstantInTime + if (typeString.equals("java.util.Calendar")) { + return "InstantInTime"; + } + + // Only components can be data sources in the block language + if (typeString.startsWith("com.google.appinventor.components.runtime.DataSource")) { + return "component"; + } + + if (typeString.equals("java.lang.Object")) { + return "any"; + } + + if (typeString.startsWith("com.google.appinventor.components.runtime.util.Continuation")) { + return "continuation"; + } + + if (typeString.equals("com.google.appinventor.components.runtime.Component")) { + return "component"; + } + + // Check if it's a component. + if (componentTypes.contains(typeString)) { + return "component"; + } + + // TODO: temporary fix!! + + // split at whitespace + final String type_ = typeString.substring(typeString.lastIndexOf(' ') + 1); + + switch (type_) { + case "float": + case "double": + case "short": + case "byte": + case "long": + case "int": + return "number"; + case "java.lang.String": + return "text"; + } + + throw new IllegalArgumentException("Cannot convert Java type '" + typeString + + "' to Yail type"); + } + + /** + * Creates and returns a {@link FileObject} for output. + * + * @param fileName the name of the output file + * @return the {@code FileObject} + * @throws IOException if the file cannot be created + */ + protected FileObject createOutputFileObject(String fileName) throws IOException { + return processingEnv.getFiler(). + createResource(StandardLocation.SOURCE_OUTPUT, OUTPUT_PACKAGE, fileName); + } + + /** + * Returns a {@link Writer} to which output should be written. As with any + * {@code Writer}, the methods {@link Writer#flush()} and {@link Writer#close()} + * should be called when output is complete. + * + * @param fileName the name of the output file + * @return the {@code Writer} + * @throws IOException if the {@code Writer} or underlying {@link FileObject} + * cannot be created + */ + protected Writer getOutputWriter(String fileName) throws IOException { + return createOutputFileObject(fileName).openWriter(); + } + + /** + * Tracks the superclass and superinterfaces for the given type and if the type inherits from + * {@link com.google.appinventor.components.runtime.Component} then it adds the class to the + * componentTypes list. This allows properties, methods, and events to use concrete Component + * types as parameters and return values. + * + * @param type a TypeMirror representing a type on the class path + */ + private void updateComponentTypes(TypeMirror type) { + if (type.getKind() == TypeKind.DECLARED) { + type.accept(new SimpleTypeVisitor7>(false) { + @Override + public Boolean visitDeclared(DeclaredType t, Set types) { + final String typeName = t.asElement().toString(); + if ("com.google.appinventor.components.runtime.Component".equals(typeName)) { + return true; + } + if (!types.contains(typeName)) { + types.add(typeName); + final TypeElement typeElement = (TypeElement) t.asElement(); + if (typeElement.getSuperclass().accept(this, types)) { + componentTypes.add(typeName); + return true; + } + for (TypeMirror iface : typeElement.getInterfaces()) { + if (iface.accept(this, types)) { + componentTypes.add(typeName); + return true; + } + } + } + return componentTypes.contains(typeName); + } + }, visitedTypes); + } + } + + private void updateWithNonEmptyValue(Set collection, String value) { + String trimmedValue = value.trim(); + if (!trimmedValue.isEmpty()) { + collection.add(trimmedValue); + } + } +} diff --git a/appinventor/component-annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/appinventor/component-scripts/src/main/resources/META-INF/services/javax.annotation.processing.Processor similarity index 100% rename from appinventor/component-annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor rename to appinventor/component-scripts/src/main/resources/META-INF/services/javax.annotation.processing.Processor diff --git a/appinventor/components/build.gradle.kts b/appinventor/components/build.gradle.kts index f8bdba42bf5..0ebb72a27ac 100644 --- a/appinventor/components/build.gradle.kts +++ b/appinventor/components/build.gradle.kts @@ -66,7 +66,9 @@ dependencies { implementation("org.twitter4j:twitter4j-media-support:3.0.5") implementation("com.caverock:androidsvg-aar:1.4") implementation("org.json:json:20220320") - + implementation(files("../lib/mpandroidchart/mpandroidchart.jar")) + implementation("com.google.api-client:google-api-client-android:1.30.2") + implementation("com.google.apis:google-api-services-sheets:v4-rev604-1.25.0") } // Ref: https://docs.gradle.org/current/userguide/cross_project_publications.html#cross_project_publications diff --git a/appinventor/components/src/main/java/com/google/appinventor/components/runtime/CloudDB.java b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/CloudDB.java index 47f560fa812..6e4295af8ab 100644 --- a/appinventor/components/src/main/java/com/google/appinventor/components/runtime/CloudDB.java +++ b/appinventor/components/src/main/java/com/google/appinventor/components/runtime/CloudDB.java @@ -1454,7 +1454,7 @@ private X509Certificate[] getSystemCertificates() { public Future getDataValue(final String key) { return background.submit(new Callable() { @Override - public YailList call() { + public YailList call() throws JSONException { // Get the value identified by the tag (key) or an empty // YailList if not present AtomicReference valueReference = getValueByTag(key, new YailList()); From c92740835f08b823cf0b2c26497b8744f5c5df9d Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Sat, 15 Oct 2022 22:27:08 +0530 Subject: [PATCH 32/35] Move buildserver resources --- .../appinventor/buildserver/resources/runtime.scm | 0 .../google/appinventor/buildserver/resources/ya.png | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename appinventor/buildserver/src/main/{java => resources}/com/google/appinventor/buildserver/resources/runtime.scm (100%) rename appinventor/buildserver/src/main/{java => resources}/com/google/appinventor/buildserver/resources/ya.png (100%) diff --git a/appinventor/buildserver/src/main/java/com/google/appinventor/buildserver/resources/runtime.scm b/appinventor/buildserver/src/main/resources/com/google/appinventor/buildserver/resources/runtime.scm similarity index 100% rename from appinventor/buildserver/src/main/java/com/google/appinventor/buildserver/resources/runtime.scm rename to appinventor/buildserver/src/main/resources/com/google/appinventor/buildserver/resources/runtime.scm diff --git a/appinventor/buildserver/src/main/java/com/google/appinventor/buildserver/resources/ya.png b/appinventor/buildserver/src/main/resources/com/google/appinventor/buildserver/resources/ya.png similarity index 100% rename from appinventor/buildserver/src/main/java/com/google/appinventor/buildserver/resources/ya.png rename to appinventor/buildserver/src/main/resources/com/google/appinventor/buildserver/resources/ya.png From 1db23ac110dcf029098fc8264cb7ef0fc56b6771 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Fri, 21 Oct 2022 20:30:08 +0530 Subject: [PATCH 33/35] Move images to frontend --- .../com/google/appinventor/images/YRLogo.png | Bin .../appinventor/images/accelerometersensor.png | Bin .../google/appinventor/images/activityStarter.png | Bin .../com/google/appinventor/images/appinvlogo-32.png | Bin .../com/google/appinventor/images/arduino.png | Bin .../com/google/appinventor/images/ball.png | Bin .../google/appinventor/images/barcodeScanner.png | Bin .../com/google/appinventor/images/barometer.png | Bin .../com/google/appinventor/images/bluetooth.png | Bin .../com/google/appinventor/images/boxClose.png | Bin .../com/google/appinventor/images/boxMenu.png | Bin .../com/google/appinventor/images/boxMinimize.png | Bin .../com/google/appinventor/images/boxRestore.png | Bin .../com/google/appinventor/images/button.png | Bin .../com/google/appinventor/images/camcorder.png | Bin .../com/google/appinventor/images/camera.png | Bin .../com/google/appinventor/images/canvas.png | Bin .../com/google/appinventor/images/chart.png | Bin .../com/google/appinventor/images/chartData.png | Bin .../com/google/appinventor/images/checkbox.png | Bin .../com/google/appinventor/images/circle.png | Bin .../com/google/appinventor/images/clock.png | Bin .../com/google/appinventor/images/close.png | Bin .../com/google/appinventor/images/cloudDB.png | Bin .../com/google/appinventor/images/codi_vert.png | Bin .../com/google/appinventor/images/colors.png | Bin .../com/google/appinventor/images/contactPicker.png | Bin .../com/google/appinventor/images/control.png | Bin .../com/google/appinventor/images/corner.png | Bin .../com/google/appinventor/images/corner_green.png | Bin .../com/google/appinventor/images/dataFile.png | Bin .../com/google/appinventor/images/datePicker.png | Bin .../com/google/appinventor/images/delete.png | Bin .../com/google/appinventor/images/dictionaries.png | Bin .../com/google/appinventor/images/emailPicker.png | Bin .../com/google/appinventor/images/extension.png | Bin .../google/appinventor/images/featurecollection.png | Bin .../com/google/appinventor/images/file.png | Bin .../com/google/appinventor/images/find.png | Bin .../com/google/appinventor/images/firebaseDB.png | Bin .../com/google/appinventor/images/form.png | Bin .../com/google/appinventor/images/fusiontables.png | Bin .../com/google/appinventor/images/gameClient.png | Bin .../com/google/appinventor/images/get-app.png | Bin .../com/google/appinventor/images/graydient.png | Bin .../com/google/appinventor/images/groupGame.png | Bin .../google/appinventor/images/gyroscopesensor.png | Bin .../com/google/appinventor/images/help.png | Bin .../com/google/appinventor/images/horizontal.png | Bin .../com/google/appinventor/images/hygrometer.png | Bin .../google/appinventor/images/iOSBookmarkBlack.png | Bin .../google/appinventor/images/iOSBookmarkWhite.png | Bin .../com/google/appinventor/images/iPadBlackFB.png | Bin .../google/appinventor/images/iPadLeftWhiteFB.png | Bin .../google/appinventor/images/iPadRightBlack.png | Bin .../google/appinventor/images/iPadRightWhite.png | Bin .../google/appinventor/images/iPhoneLeftBlack.png | Bin .../google/appinventor/images/iPhoneLeftWhiteFB.png | Bin .../google/appinventor/images/iPhoneRightBlack.png | Bin .../google/appinventor/images/iPhoneRightWhite.png | Bin .../com/google/appinventor/images/image.png | Bin .../com/google/appinventor/images/imagePicker.png | Bin .../com/google/appinventor/images/imageSprite.png | Bin .../com/google/appinventor/images/label.png | Bin .../google/appinventor/images/legoMindstormsEv3.png | Bin .../google/appinventor/images/legoMindstormsNxt.png | Bin .../com/google/appinventor/images/lightsensor.png | Bin .../com/google/appinventor/images/linestring.png | Bin .../com/google/appinventor/images/listPicker.png | Bin .../com/google/appinventor/images/listView.png | Bin .../com/google/appinventor/images/listbox.png | Bin .../com/google/appinventor/images/lists.png | Bin .../google/appinventor/images/locationSensor.png | Bin .../com/google/appinventor/images/logger.png | Bin .../com/google/appinventor/images/logic.png | Bin .../com/google/appinventor/images/logo.png | Bin .../google/appinventor/images/magneticSensor.png | Bin .../resources/com/google/appinventor/images/map.png | Bin .../com/google/appinventor/images/marker.png | Bin .../com/google/appinventor/images/math.png | Bin .../google/appinventor/images/mediaIcon_audio.png | Bin .../com/google/appinventor/images/mediaIcon_img.png | Bin .../google/appinventor/images/mediaIcon_video.png | Bin .../com/google/appinventor/images/mediastore.png | Bin .../com/google/appinventor/images/navigation.png | Bin .../com/google/appinventor/images/nearfield.png | Bin .../com/google/appinventor/images/notifier.png | Bin .../google/appinventor/images/orientationsensor.png | Bin .../google/appinventor/images/passwordtextbox.png | Bin .../com/google/appinventor/images/pedometer.png | Bin .../com/google/appinventor/images/phoneCall.png | Bin .../google/appinventor/images/phoneNumberPicker.png | Bin .../com/google/appinventor/images/phonebar.png | Bin .../appinventor/images/phonebarAndroidMaterial.png | Bin .../com/google/appinventor/images/phoneip.png | Bin .../com/google/appinventor/images/player.png | Bin .../com/google/appinventor/images/polygon.png | Bin .../com/google/appinventor/images/procedures.png | Bin .../com/google/appinventor/images/progressbar.png | Bin .../google/appinventor/images/proximitysensor.png | Bin .../com/google/appinventor/images/purr.png | Bin .../com/google/appinventor/images/radiobutton.png | Bin .../com/google/appinventor/images/rectangle.png | Bin .../com/google/appinventor/images/recyclerView.png | Bin .../com/google/appinventor/images/sharing.png | Bin .../resources/com/google/appinventor/images/sky.png | Bin .../com/google/appinventor/images/slider.png | Bin .../com/google/appinventor/images/sound.png | Bin .../com/google/appinventor/images/soundEffect.png | Bin .../com/google/appinventor/images/soundRecorder.png | Bin .../google/appinventor/images/speechRecognizer.png | Bin .../com/google/appinventor/images/spin_16.gif | Bin .../com/google/appinventor/images/spinner.png | Bin .../com/google/appinventor/images/spreadsheet.png | Bin .../com/google/appinventor/images/switch.png | Bin .../com/google/appinventor/images/table.png | Bin .../com/google/appinventor/images/talkToMeLogo.png | Bin .../com/google/appinventor/images/text.png | Bin .../com/google/appinventor/images/textToSpeech.png | Bin .../com/google/appinventor/images/textbox.png | Bin .../com/google/appinventor/images/texting.png | Bin .../com/google/appinventor/images/thermometer.png | Bin .../com/google/appinventor/images/timePicker.png | Bin .../com/google/appinventor/images/tinyDB.png | Bin .../com/google/appinventor/images/tinyWebDB.png | Bin .../com/google/appinventor/images/translator.png | Bin .../com/google/appinventor/images/twitter.png | Bin .../com/google/appinventor/images/variables.png | Bin .../com/google/appinventor/images/vertical.png | Bin .../com/google/appinventor/images/videoPlayer.png | Bin .../com/google/appinventor/images/voting.png | Bin .../resources/com/google/appinventor/images/web.png | Bin .../com/google/appinventor/images/webDB.png | Bin .../com/google/appinventor/images/webviewer.png | Bin .../com/google/appinventor/images/webviewerbig.png | Bin .../com/google/appinventor/images/wilson.png | Bin .../com/google/appinventor/images/yandex.png | Bin 137 files changed, 0 insertions(+), 0 deletions(-) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/YRLogo.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/accelerometersensor.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/activityStarter.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/appinvlogo-32.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/arduino.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/ball.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/barcodeScanner.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/barometer.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/bluetooth.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/boxClose.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/boxMenu.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/boxMinimize.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/boxRestore.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/button.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/camcorder.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/camera.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/canvas.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/chart.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/chartData.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/checkbox.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/circle.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/clock.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/close.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/cloudDB.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/codi_vert.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/colors.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/contactPicker.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/control.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/corner.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/corner_green.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/dataFile.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/datePicker.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/delete.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/dictionaries.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/emailPicker.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/extension.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/featurecollection.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/file.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/find.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/firebaseDB.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/form.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/fusiontables.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/gameClient.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/get-app.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/graydient.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/groupGame.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/gyroscopesensor.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/help.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/horizontal.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/hygrometer.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/iOSBookmarkBlack.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/iOSBookmarkWhite.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/iPadBlackFB.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/iPadLeftWhiteFB.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/iPadRightBlack.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/iPadRightWhite.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/iPhoneLeftBlack.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/iPhoneLeftWhiteFB.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/iPhoneRightBlack.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/iPhoneRightWhite.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/image.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/imagePicker.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/imageSprite.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/label.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/legoMindstormsEv3.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/legoMindstormsNxt.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/lightsensor.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/linestring.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/listPicker.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/listView.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/listbox.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/lists.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/locationSensor.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/logger.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/logic.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/logo.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/magneticSensor.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/map.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/marker.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/math.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/mediaIcon_audio.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/mediaIcon_img.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/mediaIcon_video.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/mediastore.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/navigation.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/nearfield.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/notifier.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/orientationsensor.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/passwordtextbox.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/pedometer.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/phoneCall.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/phoneNumberPicker.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/phonebar.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/phonebarAndroidMaterial.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/phoneip.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/player.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/polygon.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/procedures.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/progressbar.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/proximitysensor.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/purr.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/radiobutton.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/rectangle.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/recyclerView.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/sharing.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/sky.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/slider.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/sound.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/soundEffect.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/soundRecorder.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/speechRecognizer.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/spin_16.gif (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/spinner.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/spreadsheet.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/switch.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/table.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/talkToMeLogo.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/text.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/textToSpeech.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/textbox.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/texting.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/thermometer.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/timePicker.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/tinyDB.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/tinyWebDB.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/translator.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/twitter.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/variables.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/vertical.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/videoPlayer.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/voting.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/web.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/webDB.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/webviewer.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/webviewerbig.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/wilson.png (100%) rename appinventor/{appengine-shared => appengine-frontend}/src/main/resources/com/google/appinventor/images/yandex.png (100%) diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/YRLogo.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/YRLogo.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/YRLogo.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/YRLogo.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/accelerometersensor.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/accelerometersensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/accelerometersensor.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/accelerometersensor.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/activityStarter.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/activityStarter.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/activityStarter.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/activityStarter.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/appinvlogo-32.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/appinvlogo-32.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/appinvlogo-32.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/appinvlogo-32.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/arduino.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/arduino.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/arduino.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/arduino.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/ball.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/ball.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/ball.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/ball.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/barcodeScanner.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/barcodeScanner.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/barcodeScanner.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/barcodeScanner.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/barometer.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/barometer.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/barometer.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/barometer.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/bluetooth.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/bluetooth.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/bluetooth.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/bluetooth.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxClose.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/boxClose.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxClose.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/boxClose.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxMenu.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/boxMenu.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxMenu.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/boxMenu.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxMinimize.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/boxMinimize.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxMinimize.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/boxMinimize.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxRestore.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/boxRestore.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/boxRestore.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/boxRestore.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/button.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/button.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/button.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/button.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/camcorder.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/camcorder.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/camcorder.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/camcorder.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/camera.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/camera.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/camera.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/camera.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/canvas.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/canvas.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/canvas.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/canvas.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/chart.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/chart.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/chart.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/chart.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/chartData.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/chartData.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/chartData.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/chartData.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/checkbox.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/checkbox.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/checkbox.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/checkbox.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/circle.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/circle.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/circle.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/circle.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/clock.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/clock.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/clock.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/clock.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/close.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/close.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/close.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/close.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/cloudDB.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/cloudDB.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/cloudDB.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/cloudDB.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/codi_vert.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/codi_vert.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/codi_vert.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/codi_vert.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/colors.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/colors.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/colors.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/colors.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/contactPicker.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/contactPicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/contactPicker.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/contactPicker.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/control.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/control.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/control.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/control.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/corner.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/corner.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/corner.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/corner.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/corner_green.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/corner_green.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/corner_green.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/corner_green.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/dataFile.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/dataFile.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/dataFile.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/dataFile.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/datePicker.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/datePicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/datePicker.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/datePicker.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/delete.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/delete.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/delete.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/delete.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/dictionaries.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/dictionaries.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/dictionaries.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/dictionaries.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/emailPicker.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/emailPicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/emailPicker.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/emailPicker.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/extension.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/extension.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/extension.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/extension.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/featurecollection.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/featurecollection.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/featurecollection.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/featurecollection.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/file.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/file.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/file.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/file.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/find.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/find.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/find.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/find.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/firebaseDB.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/firebaseDB.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/firebaseDB.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/firebaseDB.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/form.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/form.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/form.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/form.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/fusiontables.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/fusiontables.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/fusiontables.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/fusiontables.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/gameClient.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/gameClient.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/gameClient.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/gameClient.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/get-app.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/get-app.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/get-app.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/get-app.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/graydient.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/graydient.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/graydient.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/graydient.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/groupGame.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/groupGame.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/groupGame.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/groupGame.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/gyroscopesensor.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/gyroscopesensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/gyroscopesensor.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/gyroscopesensor.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/help.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/help.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/help.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/help.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/horizontal.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/horizontal.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/horizontal.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/horizontal.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/hygrometer.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/hygrometer.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/hygrometer.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/hygrometer.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iOSBookmarkBlack.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iOSBookmarkBlack.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iOSBookmarkBlack.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iOSBookmarkBlack.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iOSBookmarkWhite.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iOSBookmarkWhite.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iOSBookmarkWhite.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iOSBookmarkWhite.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadBlackFB.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPadBlackFB.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadBlackFB.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPadBlackFB.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadLeftWhiteFB.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPadLeftWhiteFB.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadLeftWhiteFB.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPadLeftWhiteFB.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadRightBlack.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPadRightBlack.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadRightBlack.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPadRightBlack.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadRightWhite.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPadRightWhite.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPadRightWhite.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPadRightWhite.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneLeftBlack.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPhoneLeftBlack.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneLeftBlack.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPhoneLeftBlack.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneLeftWhiteFB.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPhoneLeftWhiteFB.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneLeftWhiteFB.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPhoneLeftWhiteFB.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneRightBlack.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPhoneRightBlack.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneRightBlack.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPhoneRightBlack.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneRightWhite.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPhoneRightWhite.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/iPhoneRightWhite.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/iPhoneRightWhite.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/image.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/image.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/image.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/image.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/imagePicker.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/imagePicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/imagePicker.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/imagePicker.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/imageSprite.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/imageSprite.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/imageSprite.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/imageSprite.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/label.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/label.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/label.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/label.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/legoMindstormsEv3.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/legoMindstormsEv3.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/legoMindstormsEv3.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/legoMindstormsEv3.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/legoMindstormsNxt.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/legoMindstormsNxt.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/legoMindstormsNxt.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/legoMindstormsNxt.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/lightsensor.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/lightsensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/lightsensor.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/lightsensor.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/linestring.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/linestring.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/linestring.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/linestring.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listPicker.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/listPicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listPicker.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/listPicker.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listView.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/listView.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listView.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/listView.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listbox.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/listbox.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/listbox.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/listbox.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/lists.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/lists.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/lists.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/lists.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/locationSensor.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/locationSensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/locationSensor.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/locationSensor.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logger.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/logger.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logger.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/logger.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logic.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/logic.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logic.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/logic.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logo.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/logo.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/logo.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/logo.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/magneticSensor.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/magneticSensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/magneticSensor.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/magneticSensor.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/map.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/map.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/map.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/map.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/marker.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/marker.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/marker.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/marker.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/math.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/math.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/math.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/math.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_audio.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/mediaIcon_audio.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_audio.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/mediaIcon_audio.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_img.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/mediaIcon_img.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_img.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/mediaIcon_img.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_video.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/mediaIcon_video.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediaIcon_video.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/mediaIcon_video.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediastore.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/mediastore.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/mediastore.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/mediastore.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/navigation.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/navigation.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/navigation.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/navigation.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/nearfield.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/nearfield.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/nearfield.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/nearfield.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/notifier.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/notifier.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/notifier.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/notifier.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/orientationsensor.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/orientationsensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/orientationsensor.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/orientationsensor.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/passwordtextbox.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/passwordtextbox.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/passwordtextbox.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/passwordtextbox.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/pedometer.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/pedometer.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/pedometer.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/pedometer.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneCall.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/phoneCall.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneCall.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/phoneCall.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneNumberPicker.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/phoneNumberPicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneNumberPicker.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/phoneNumberPicker.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phonebar.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/phonebar.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phonebar.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/phonebar.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phonebarAndroidMaterial.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/phonebarAndroidMaterial.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phonebarAndroidMaterial.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/phonebarAndroidMaterial.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneip.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/phoneip.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/phoneip.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/phoneip.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/player.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/player.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/player.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/player.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/polygon.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/polygon.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/polygon.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/polygon.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/procedures.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/procedures.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/procedures.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/procedures.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/progressbar.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/progressbar.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/progressbar.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/progressbar.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/proximitysensor.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/proximitysensor.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/proximitysensor.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/proximitysensor.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/purr.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/purr.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/purr.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/purr.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/radiobutton.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/radiobutton.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/radiobutton.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/radiobutton.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/rectangle.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/rectangle.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/rectangle.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/rectangle.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/recyclerView.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/recyclerView.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/recyclerView.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/recyclerView.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sharing.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/sharing.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sharing.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/sharing.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sky.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/sky.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sky.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/sky.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/slider.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/slider.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/slider.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/slider.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sound.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/sound.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/sound.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/sound.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/soundEffect.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/soundEffect.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/soundEffect.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/soundEffect.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/soundRecorder.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/soundRecorder.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/soundRecorder.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/soundRecorder.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/speechRecognizer.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/speechRecognizer.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/speechRecognizer.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/speechRecognizer.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spin_16.gif b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/spin_16.gif similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spin_16.gif rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/spin_16.gif diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spinner.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/spinner.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spinner.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/spinner.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spreadsheet.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/spreadsheet.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/spreadsheet.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/spreadsheet.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/switch.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/switch.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/switch.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/switch.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/table.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/table.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/table.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/table.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/talkToMeLogo.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/talkToMeLogo.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/talkToMeLogo.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/talkToMeLogo.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/text.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/text.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/text.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/text.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/textToSpeech.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/textToSpeech.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/textToSpeech.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/textToSpeech.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/textbox.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/textbox.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/textbox.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/textbox.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/texting.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/texting.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/texting.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/texting.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/thermometer.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/thermometer.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/thermometer.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/thermometer.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/timePicker.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/timePicker.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/timePicker.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/timePicker.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/tinyDB.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/tinyDB.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/tinyDB.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/tinyDB.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/tinyWebDB.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/tinyWebDB.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/tinyWebDB.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/tinyWebDB.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/translator.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/translator.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/translator.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/translator.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/twitter.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/twitter.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/twitter.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/twitter.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/variables.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/variables.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/variables.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/variables.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/vertical.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/vertical.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/vertical.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/vertical.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/videoPlayer.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/videoPlayer.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/videoPlayer.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/videoPlayer.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/voting.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/voting.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/voting.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/voting.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/web.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/web.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/web.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/web.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webDB.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/webDB.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webDB.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/webDB.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webviewer.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/webviewer.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webviewer.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/webviewer.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webviewerbig.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/webviewerbig.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/webviewerbig.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/webviewerbig.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/wilson.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/wilson.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/wilson.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/wilson.png diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/yandex.png b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/yandex.png similarity index 100% rename from appinventor/appengine-shared/src/main/resources/com/google/appinventor/images/yandex.png rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/images/yandex.png From f1deb1c8ef26764724c6e4e1447f569b1f703cf1 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Fri, 21 Oct 2022 20:31:36 +0530 Subject: [PATCH 34/35] Update to latest GWT plugin --- appinventor/appengine-frontend/build.gradle.kts | 9 ++++++++- appinventor/appengine-shared/build.gradle.kts | 2 +- appinventor/common-utils/build.gradle.kts | 4 ++-- appinventor/common-version/build.gradle.kts | 2 +- appinventor/component-constants/build.gradle.kts | 4 ++-- appinventor/settings.gradle.kts | 6 ++++++ 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/appinventor/appengine-frontend/build.gradle.kts b/appinventor/appengine-frontend/build.gradle.kts index 4a112981e10..1aad166d89f 100644 --- a/appinventor/appengine-frontend/build.gradle.kts +++ b/appinventor/appengine-frontend/build.gradle.kts @@ -1,7 +1,7 @@ plugins { java war - id("org.docstr.gwt") version "1.1.21" + id("org.docstr.gwt") } group = "com.google.appinventor" @@ -39,14 +39,21 @@ tasks.withType { gwt { gwtVersion = "2.10.0" modules("com.google.appinventor.YaClient") + + maxHeapSize = "1G" } dependencies { + gwt(projects.commonUtils) + gwt(projects.commonVersion) + gwt(projects.componentConstants) + gwt(projects.appengineShared) implementation(projects.commonUtils) implementation(projects.commonVersion) implementation(projects.componentConstants) implementation(projects.appengineShared) implementation("com.google.gwt:gwt-user:2.10.0") + implementation("com.google.gwt:gwt-dev:2.10.0") implementation("com.allen-sauer.gwt.dnd:gwt-dnd:3.2.3") implementation("com.googlecode.gwtquery:gwtquery:1.5-beta1") implementation("com.google.gwt:gwt-incubator:2.0.1") diff --git a/appinventor/appengine-shared/build.gradle.kts b/appinventor/appengine-shared/build.gradle.kts index daff6940b62..4e58f83110c 100644 --- a/appinventor/appengine-shared/build.gradle.kts +++ b/appinventor/appengine-shared/build.gradle.kts @@ -1,6 +1,6 @@ plugins { `java-library` - id("org.docstr.gwt") version "1.1.21" // TODO: should apply gwt-base + id("org.docstr.gwt.base") } java { diff --git a/appinventor/common-utils/build.gradle.kts b/appinventor/common-utils/build.gradle.kts index ab719e34568..4016fe7b016 100644 --- a/appinventor/common-utils/build.gradle.kts +++ b/appinventor/common-utils/build.gradle.kts @@ -1,11 +1,11 @@ plugins { `java-library` - id("org.docstr.gwt") version "1.1.21" // TODO: should apply gwt-base + id("org.docstr.gwt.base") } gwt { gwtVersion = "2.10.0" - modules("com.google.appinventor.common.CommonVersion") + modules("com.google.appinventor.common.CommonUtils") } java { diff --git a/appinventor/common-version/build.gradle.kts b/appinventor/common-version/build.gradle.kts index e3d53818b98..2cd0b6c108e 100644 --- a/appinventor/common-version/build.gradle.kts +++ b/appinventor/common-version/build.gradle.kts @@ -4,7 +4,7 @@ import java.text.SimpleDateFormat plugins { `java-library` - id("org.docstr.gwt") version "1.1.21" // TODO: should apply gwt-base + id("org.docstr.gwt.base") } gwt { diff --git a/appinventor/component-constants/build.gradle.kts b/appinventor/component-constants/build.gradle.kts index fdcef153767..83c69710e6b 100644 --- a/appinventor/component-constants/build.gradle.kts +++ b/appinventor/component-constants/build.gradle.kts @@ -1,11 +1,11 @@ plugins { `java-library` - id("org.docstr.gwt") version "1.1.21" // TODO: should apply gwt-base + id("org.docstr.gwt.base") } gwt { gwtVersion = "2.10.0" - modules("com.google.appinventor.common.CommonVersion") + modules("com.google.appinventor.common.CommonConstants") } java { diff --git a/appinventor/settings.gradle.kts b/appinventor/settings.gradle.kts index bc8fe40ae5d..10b2899a53e 100644 --- a/appinventor/settings.gradle.kts +++ b/appinventor/settings.gradle.kts @@ -14,6 +14,12 @@ include("barcode") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") pluginManagement { + plugins { + id("org.docstr.gwt") version "1.1.22" apply false + id("org.docstr.gwt.base") version "1.1.22" apply false + id("org.docstr.gwt.compiler") version "1.1.22" apply false + id("org.docstr.gwt.war") version "1.1.22" apply false + } repositories { gradlePluginPortal() google() From 3eafc0af4cdca38e42b385f6e3dde8e44b76d0c8 Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Tue, 6 Dec 2022 19:21:44 +0530 Subject: [PATCH 35/35] misc --- .../appengine-frontend/build.gradle.kts | 15 ++++++- .../google/appinventor}/YaClient-dev.gwt.xml | 0 .../com/google/appinventor/YaClient.gwt.xml | 28 +------------ appinventor/appengine-shared/build.gradle.kts | 7 ++++ .../shared/AppengineShared.gwt.xml | 42 +++++++++++++++++++ appinventor/build.gradle.kts | 4 -- appinventor/common-utils/build.gradle.kts | 8 ++++ appinventor/common-version/build.gradle.kts | 6 +++ .../component-constants/build.gradle.kts | 8 +++- appinventor/components/build.gradle.kts | 16 +++---- appinventor/settings.gradle.kts | 3 ++ 11 files changed, 94 insertions(+), 43 deletions(-) rename appinventor/appengine-frontend/{ => src/main/resources/com/google/appinventor}/YaClient-dev.gwt.xml (100%) create mode 100644 appinventor/appengine-shared/src/main/resources/com/google/appinventor/shared/AppengineShared.gwt.xml diff --git a/appinventor/appengine-frontend/build.gradle.kts b/appinventor/appengine-frontend/build.gradle.kts index 1aad166d89f..63856ed5e69 100644 --- a/appinventor/appengine-frontend/build.gradle.kts +++ b/appinventor/appengine-frontend/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - java +// java war id("org.docstr.gwt") } @@ -14,6 +14,10 @@ java { sourceSets { main { java { + // FIXME: This requires us to run :components:assembleRelease first. + // Adds the annotation processor output to the classpath + // - AutogeneratedOdeMessages.java + // - ComponentTranslation.java srcDirs("../components/build/generated/ap_generated_sources/release/out/") exclude("*.md", "*.json", "*.txt") } @@ -39,8 +43,17 @@ tasks.withType { gwt { gwtVersion = "2.10.0" modules("com.google.appinventor.YaClient") + devModules("com.google.appinventor.YaClient-dev") maxHeapSize = "1G" + compiler.strict = true + println("##### SRC: ${src.files}") +// println("##### CLASSPATH: ${}") + println("##### MODULES: ${modules}") +// logLevel = org.docstr.gradle.plugins.gwt.LogLevel.ALL + +// src += files(tasks.compileJava.get().options.generatedSourceOutputDirectory) +// src += files(project(":common-utils").sourceSets["main"].allJava) + files(project(":common-utils").sourceSets["main"].resources) } dependencies { diff --git a/appinventor/appengine-frontend/YaClient-dev.gwt.xml b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/YaClient-dev.gwt.xml similarity index 100% rename from appinventor/appengine-frontend/YaClient-dev.gwt.xml rename to appinventor/appengine-frontend/src/main/resources/com/google/appinventor/YaClient-dev.gwt.xml diff --git a/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/YaClient.gwt.xml b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/YaClient.gwt.xml index 637855344ca..fd809d75ffc 100644 --- a/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/YaClient.gwt.xml +++ b/appinventor/appengine-frontend/src/main/resources/com/google/appinventor/YaClient.gwt.xml @@ -29,6 +29,7 @@ + @@ -76,36 +77,9 @@ - - - - - - - - - - - - - - - - - - - diff --git a/appinventor/appengine-shared/build.gradle.kts b/appinventor/appengine-shared/build.gradle.kts index 4e58f83110c..a4dfc52a0f3 100644 --- a/appinventor/appengine-shared/build.gradle.kts +++ b/appinventor/appengine-shared/build.gradle.kts @@ -9,8 +9,15 @@ java { } } +tasks.named("jar") { + from(project.sourceSets.main.get().allSource) + from(project.sourceSets.main.get().output) + this.duplicatesStrategy = DuplicatesStrategy.EXCLUDE +} + gwt { gwtVersion = "2.10.0" + modules("com.google.appinventor.shared.AppengineShared") } dependencies { diff --git a/appinventor/appengine-shared/src/main/resources/com/google/appinventor/shared/AppengineShared.gwt.xml b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/shared/AppengineShared.gwt.xml new file mode 100644 index 00000000000..7c8507306bd --- /dev/null +++ b/appinventor/appengine-shared/src/main/resources/com/google/appinventor/shared/AppengineShared.gwt.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/appinventor/build.gradle.kts b/appinventor/build.gradle.kts index ede50d52b31..7cd94fe78dd 100644 --- a/appinventor/build.gradle.kts +++ b/appinventor/build.gradle.kts @@ -1,5 +1 @@ description = "Definitions common to multiple App Inventor build.xml files." - -plugins { - id("com.android.library") version "7.2.2" apply false -} diff --git a/appinventor/common-utils/build.gradle.kts b/appinventor/common-utils/build.gradle.kts index 4016fe7b016..4f39cfe1ac9 100644 --- a/appinventor/common-utils/build.gradle.kts +++ b/appinventor/common-utils/build.gradle.kts @@ -6,6 +6,8 @@ plugins { gwt { gwtVersion = "2.10.0" modules("com.google.appinventor.common.CommonUtils") + +// src += files(sourceSets["main"].allJava) + files(sourceSets["main"].resources) } java { @@ -14,6 +16,12 @@ java { } } +tasks.named("jar") { + from(project.sourceSets.main.get().allSource) + from(project.sourceSets.main.get().output) + this.duplicatesStrategy = DuplicatesStrategy.EXCLUDE +} + dependencies { implementation("com.google.guava:guava:14.0.1") } \ No newline at end of file diff --git a/appinventor/common-version/build.gradle.kts b/appinventor/common-version/build.gradle.kts index 2cd0b6c108e..81f642958a2 100644 --- a/appinventor/common-version/build.gradle.kts +++ b/appinventor/common-version/build.gradle.kts @@ -18,6 +18,12 @@ java { } } +tasks.named("jar") { + from(project.sourceSets.main.get().allSource) + from(project.sourceSets.main.get().output) + this.duplicatesStrategy = DuplicatesStrategy.EXCLUDE +} + val taskGitBuildId by tasks.creating(Copy::class) { from("GitBuildId.template") into("$buildDir/generated/sources/java") diff --git a/appinventor/component-constants/build.gradle.kts b/appinventor/component-constants/build.gradle.kts index 83c69710e6b..bd6ea52efc8 100644 --- a/appinventor/component-constants/build.gradle.kts +++ b/appinventor/component-constants/build.gradle.kts @@ -5,7 +5,7 @@ plugins { gwt { gwtVersion = "2.10.0" - modules("com.google.appinventor.common.CommonConstants") + modules("com.google.appinventor.components.CommonConstants") } java { @@ -14,6 +14,12 @@ java { } } +tasks.named("jar") { + from(project.sourceSets.main.get().allSource) + from(project.sourceSets.main.get().output) + this.duplicatesStrategy = DuplicatesStrategy.EXCLUDE +} + dependencies { } diff --git a/appinventor/components/build.gradle.kts b/appinventor/components/build.gradle.kts index 0ebb72a27ac..5694c047997 100644 --- a/appinventor/components/build.gradle.kts +++ b/appinventor/components/build.gradle.kts @@ -73,15 +73,11 @@ dependencies { // Ref: https://docs.gradle.org/current/userguide/cross_project_publications.html#cross_project_publications -//val androidRuntimeJar: Configuration by configurations.creating { -// isCanBeConsumed = true -// isCanBeResolved = false -// // If you want this configuration to share the same dependencies, otherwise omit this line -// extendsFrom(configurations["implementation"], configurations["runtimeOnly"]) -//} -// -//artifacts { -// archives(androidRuntimeJar) -//} +val androidRuntimeJar: Configuration by configurations.creating { + isCanBeConsumed = true + isCanBeResolved = false + // If you want this configuration to share the same dependencies, otherwise omit this line + extendsFrom(configurations["implementation"], configurations["runtimeOnly"]) +} android.libraryVariants.forEach(::println) \ No newline at end of file diff --git a/appinventor/settings.gradle.kts b/appinventor/settings.gradle.kts index 10b2899a53e..ada0e0fd4bb 100644 --- a/appinventor/settings.gradle.kts +++ b/appinventor/settings.gradle.kts @@ -19,6 +19,9 @@ pluginManagement { id("org.docstr.gwt.base") version "1.1.22" apply false id("org.docstr.gwt.compiler") version "1.1.22" apply false id("org.docstr.gwt.war") version "1.1.22" apply false + + id("com.android.application") version "7.3.0" apply false + id("com.android.library") version "7.3.0" apply false } repositories { gradlePluginPortal()