Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
appinventor-sources
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
xpstem
appinventor-sources
Commits
135acbca
Commit
135acbca
authored
Jul 02, 2012
by
Andrew F. McKinney
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #51 from klaverty/version-number
Version number for submitting app to Google Play.
parents
a1203f6b
0187dd51
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
220 additions
and
18 deletions
+220
-18
appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockForm.java
...appinventor/client/editor/simple/components/MockForm.java
+38
-0
appinventor/appengine/src/com/google/appinventor/client/settings/project/YoungAndroidSettings.java
...nventor/client/settings/project/YoungAndroidSettings.java
+6
-0
appinventor/appengine/src/com/google/appinventor/client/youngandroid/YoungAndroidFormUpgrader.java
...nventor/client/youngandroid/YoungAndroidFormUpgrader.java
+5
-0
appinventor/appengine/src/com/google/appinventor/server/FileImporterImpl.java
...e/src/com/google/appinventor/server/FileImporterImpl.java
+2
-2
appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectService.java
...rver/project/youngandroid/YoungAndroidProjectService.java
+35
-9
appinventor/appengine/src/com/google/appinventor/shared/settings/SettingsConstants.java
...google/appinventor/shared/settings/SettingsConstants.java
+2
-0
appinventor/appengine/tests/com/google/appinventor/server/ProjectServiceTest.java
...sts/com/google/appinventor/server/ProjectServiceTest.java
+6
-2
appinventor/blockslib/src/openblocks/yacodeblocks/BlockSaveFile.java
.../blockslib/src/openblocks/yacodeblocks/BlockSaveFile.java
+5
-0
appinventor/buildserver/src/com/google/appinventor/buildserver/Compiler.java
...rver/src/com/google/appinventor/buildserver/Compiler.java
+9
-2
appinventor/buildserver/src/com/google/appinventor/buildserver/Project.java
...erver/src/com/google/appinventor/buildserver/Project.java
+40
-0
appinventor/components/src/com/google/appinventor/components/common/YaVersion.java
...c/com/google/appinventor/components/common/YaVersion.java
+6
-2
appinventor/components/src/com/google/appinventor/components/runtime/Form.java
...s/src/com/google/appinventor/components/runtime/Form.java
+25
-1
appinventor/docs/learn/reference/components/basic.html
appinventor/docs/learn/reference/components/basic.html
+18
-0
appinventor/docs/learn/reference/other/appstoplay.html
appinventor/docs/learn/reference/other/appstoplay.html
+23
-0
No files found.
appinventor/appengine/src/com/google/appinventor/client/editor/simple/components/MockForm.java
View file @
135acbca
...
@@ -109,6 +109,8 @@ public final class MockForm extends MockContainer {
...
@@ -109,6 +109,8 @@ public final class MockForm extends MockContainer {
private
static
final
String
PROPERTY_NAME_SCREEN_ORIENTATION
=
"ScreenOrientation"
;
private
static
final
String
PROPERTY_NAME_SCREEN_ORIENTATION
=
"ScreenOrientation"
;
private
static
final
String
PROPERTY_NAME_SCROLLABLE
=
"Scrollable"
;
private
static
final
String
PROPERTY_NAME_SCROLLABLE
=
"Scrollable"
;
private
static
final
String
PROPERTY_NAME_ICON
=
"Icon"
;
private
static
final
String
PROPERTY_NAME_ICON
=
"Icon"
;
private
static
final
String
PROPERTY_NAME_VCODE
=
"VersionCode"
;
private
static
final
String
PROPERTY_NAME_VNAME
=
"VersionName"
;
// Form UI components
// Form UI components
AbsolutePanel
formWidget
;
AbsolutePanel
formWidget
;
...
@@ -279,6 +281,16 @@ public final class MockForm extends MockContainer {
...
@@ -279,6 +281,16 @@ public final class MockForm extends MockContainer {
return
editor
.
isScreen1
();
return
editor
.
isScreen1
();
}
}
if
(
propertyName
.
equals
(
PROPERTY_NAME_VNAME
))
{
// The VersionName property actually applies to the application and is only visible on Screen1.
return
editor
.
isScreen1
();
}
if
(
propertyName
.
equals
(
PROPERTY_NAME_VCODE
))
{
// The VersionCode property actually applies to the application and is only visible on Screen1.
return
editor
.
isScreen1
();
}
return
super
.
isPropertyVisible
(
propertyName
);
return
super
.
isPropertyVisible
(
propertyName
);
}
}
...
@@ -346,6 +358,28 @@ public final class MockForm extends MockContainer {
...
@@ -346,6 +358,28 @@ public final class MockForm extends MockContainer {
}
}
}
}
private
void
setVCodeProperty
(
String
vcode
)
{
// The VersionCode property actually applies to the application and is only visible on Screen1.
// When we load a form that is not Screen1, this method will be called with the default value
// for VersionCode (1). We need to ignore that.
if
(
editor
.
isScreen1
())
{
editor
.
getProjectEditor
().
changeProjectSettingsProperty
(
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_CODE
,
vcode
);
}
}
private
void
setVNameProperty
(
String
vname
)
{
// The VersionName property actually applies to the application and is only visible on Screen1.
// When we load a form that is not Screen1, this method will be called with the default value
// for VersionName (1.0). We need to ignore that.
if
(
editor
.
isScreen1
())
{
editor
.
getProjectEditor
().
changeProjectSettingsProperty
(
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_NAME
,
vname
);
}
}
/**
/**
* Forces a re-layout of the child components of the container.
* Forces a re-layout of the child components of the container.
*/
*/
...
@@ -534,6 +568,10 @@ public final class MockForm extends MockContainer {
...
@@ -534,6 +568,10 @@ public final class MockForm extends MockContainer {
titleBar
.
changeTitle
(
newValue
);
titleBar
.
changeTitle
(
newValue
);
}
else
if
(
propertyName
.
equals
(
PROPERTY_NAME_ICON
))
{
}
else
if
(
propertyName
.
equals
(
PROPERTY_NAME_ICON
))
{
setIconProperty
(
newValue
);
setIconProperty
(
newValue
);
}
else
if
(
propertyName
.
equals
(
PROPERTY_NAME_VCODE
))
{
setVCodeProperty
(
newValue
);
}
else
if
(
propertyName
.
equals
(
PROPERTY_NAME_VNAME
))
{
setVNameProperty
(
newValue
);
}
}
}
}
}
}
appinventor/appengine/src/com/google/appinventor/client/settings/project/YoungAndroidSettings.java
View file @
135acbca
...
@@ -26,5 +26,11 @@ public final class YoungAndroidSettings extends Settings {
...
@@ -26,5 +26,11 @@ public final class YoungAndroidSettings extends Settings {
addProperty
(
new
EditableProperty
(
this
,
addProperty
(
new
EditableProperty
(
this
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_SHOW_HIDDEN_COMPONENTS
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_SHOW_HIDDEN_COMPONENTS
,
"False"
,
EditableProperty
.
TYPE_INVISIBLE
));
"False"
,
EditableProperty
.
TYPE_INVISIBLE
));
addProperty
(
new
EditableProperty
(
this
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_CODE
,
"1"
,
EditableProperty
.
TYPE_INVISIBLE
));
addProperty
(
new
EditableProperty
(
this
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_NAME
,
"1.0"
,
EditableProperty
.
TYPE_INVISIBLE
));
}
}
}
}
appinventor/appengine/src/com/google/appinventor/client/youngandroid/YoungAndroidFormUpgrader.java
View file @
135acbca
...
@@ -561,6 +561,11 @@ public final class YoungAndroidFormUpgrader {
...
@@ -561,6 +561,11 @@ public final class YoungAndroidFormUpgrader {
// was added.
// was added.
srcCompVersion
=
6
;
srcCompVersion
=
6
;
}
}
if
(
srcCompVersion
<
7
)
{
// The VersionCode and VersionName properties were added. No properties need to be modified
// to update to version 7.
srcCompVersion
=
7
;
}
return
srcCompVersion
;
return
srcCompVersion
;
}
}
...
...
appinventor/appengine/src/com/google/appinventor/server/FileImporterImpl.java
View file @
135acbca
...
@@ -93,7 +93,7 @@ public final class FileImporterImpl implements FileImporter {
...
@@ -93,7 +93,7 @@ public final class FileImporterImpl implements FileImporter {
// so that it contains the correct entries for "main" and "name", which are dependent on
// so that it contains the correct entries for "main" and "name", which are dependent on
// the projectName and qualifiedFormName.
// the projectName and qualifiedFormName.
String
content
=
YoungAndroidProjectService
.
getProjectPropertiesFileContents
(
String
content
=
YoungAndroidProjectService
.
getProjectPropertiesFileContents
(
projectName
,
qualifiedFormName
,
null
);
projectName
,
qualifiedFormName
,
null
,
null
,
null
);
project
.
addTextFile
(
new
TextFile
(
fileName
,
content
));
project
.
addTextFile
(
new
TextFile
(
fileName
,
content
));
isProjectArchive
=
true
;
isProjectArchive
=
true
;
...
@@ -146,7 +146,7 @@ public final class FileImporterImpl implements FileImporter {
...
@@ -146,7 +146,7 @@ public final class FileImporterImpl implements FileImporter {
if
(
projectHistory
!=
null
)
{
if
(
projectHistory
!=
null
)
{
project
.
setProjectHistory
(
projectHistory
);
project
.
setProjectHistory
(
projectHistory
);
}
}
String
settings
=
YoungAndroidProjectService
.
getProjectSettings
(
null
);
String
settings
=
YoungAndroidProjectService
.
getProjectSettings
(
null
,
null
,
null
);
long
projectId
=
storageIo
.
createProject
(
userId
,
project
,
settings
);
long
projectId
=
storageIo
.
createProject
(
userId
,
project
,
settings
);
return
new
UserProject
(
projectId
,
storageIo
.
getProjectName
(
userId
,
projectId
),
return
new
UserProject
(
projectId
,
storageIo
.
getProjectName
(
userId
,
projectId
),
storageIo
.
getProjectType
(
userId
,
projectId
),
storageIo
.
getProjectType
(
userId
,
projectId
),
...
...
appinventor/appengine/src/com/google/appinventor/server/project/youngandroid/YoungAndroidProjectService.java
View file @
135acbca
...
@@ -115,11 +115,15 @@ public final class YoungAndroidProjectService extends CommonProjectService {
...
@@ -115,11 +115,15 @@ public final class YoungAndroidProjectService extends CommonProjectService {
/**
/**
* Returns project settings that can be used when creating a new project.
* Returns project settings that can be used when creating a new project.
*/
*/
public
static
String
getProjectSettings
(
String
icon
)
{
public
static
String
getProjectSettings
(
String
icon
,
String
vCode
,
String
vName
)
{
icon
=
Strings
.
nullToEmpty
(
icon
);
icon
=
Strings
.
nullToEmpty
(
icon
);
vCode
=
Strings
.
nullToEmpty
(
vCode
);
vName
=
Strings
.
nullToEmpty
(
vName
);
return
"{\""
+
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
+
"\":{"
+
return
"{\""
+
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
+
"\":{"
+
"\""
+
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_ICON
+
"\":\""
+
"\""
+
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_ICON
+
"\":\""
+
icon
+
"\"}}"
;
icon
+
"\",\""
+
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_CODE
+
"\":\""
+
vCode
+
"\",\""
+
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_NAME
+
"\":\""
+
vName
+
"\"}}"
;
}
}
/**
/**
...
@@ -129,9 +133,11 @@ public final class YoungAndroidProjectService extends CommonProjectService {
...
@@ -129,9 +133,11 @@ public final class YoungAndroidProjectService extends CommonProjectService {
* @param projectName the name of the project
* @param projectName the name of the project
* @param qualifiedName the qualified name of Screen1 in the project
* @param qualifiedName the qualified name of Screen1 in the project
* @param icon the name of the asset to use as the application icon
* @param icon the name of the asset to use as the application icon
* @param vcode the version code
* @param vname the version name
*/
*/
public
static
String
getProjectPropertiesFileContents
(
String
projectName
,
String
qualifiedName
,
public
static
String
getProjectPropertiesFileContents
(
String
projectName
,
String
qualifiedName
,
String
icon
)
{
String
icon
,
String
vcode
,
String
vname
)
{
String
contents
=
"main="
+
qualifiedName
+
"\n"
+
String
contents
=
"main="
+
qualifiedName
+
"\n"
+
"name="
+
projectName
+
'\n'
+
"name="
+
projectName
+
'\n'
+
"assets=../"
+
ASSETS_FOLDER
+
"\n"
+
"assets=../"
+
ASSETS_FOLDER
+
"\n"
+
...
@@ -140,6 +146,12 @@ public final class YoungAndroidProjectService extends CommonProjectService {
...
@@ -140,6 +146,12 @@ public final class YoungAndroidProjectService extends CommonProjectService {
if
(
icon
!=
null
&&
!
icon
.
isEmpty
())
{
if
(
icon
!=
null
&&
!
icon
.
isEmpty
())
{
contents
+=
"icon="
+
icon
+
"\n"
;
contents
+=
"icon="
+
icon
+
"\n"
;
}
}
if
(
vcode
!=
null
&&
!
vcode
.
isEmpty
())
{
contents
+=
"versioncode="
+
vcode
+
"\n"
;
}
if
(
vname
!=
null
&&
!
vname
.
isEmpty
())
{
contents
+=
"versionname="
+
vname
+
"\n"
;
}
return
contents
;
return
contents
;
}
}
...
@@ -203,6 +215,12 @@ public final class YoungAndroidProjectService extends CommonProjectService {
...
@@ -203,6 +215,12 @@ public final class YoungAndroidProjectService extends CommonProjectService {
String
newIcon
=
Strings
.
nullToEmpty
(
settings
.
getSetting
(
String
newIcon
=
Strings
.
nullToEmpty
(
settings
.
getSetting
(
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
,
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_ICON
));
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_ICON
));
String
newVCode
=
Strings
.
nullToEmpty
(
settings
.
getSetting
(
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_CODE
));
String
newVName
=
Strings
.
nullToEmpty
(
settings
.
getSetting
(
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_NAME
));
// Extract the old icon from the project.properties file from storageIo.
// Extract the old icon from the project.properties file from storageIo.
String
projectProperties
=
storageIo
.
downloadFile
(
userId
,
projectId
,
String
projectProperties
=
storageIo
.
downloadFile
(
userId
,
projectId
,
...
@@ -216,12 +234,14 @@ public final class YoungAndroidProjectService extends CommonProjectService {
...
@@ -216,12 +234,14 @@ public final class YoungAndroidProjectService extends CommonProjectService {
return
;
return
;
}
}
String
oldIcon
=
Strings
.
nullToEmpty
(
properties
.
getProperty
(
"icon"
));
String
oldIcon
=
Strings
.
nullToEmpty
(
properties
.
getProperty
(
"icon"
));
String
oldVCode
=
Strings
.
nullToEmpty
(
properties
.
getProperty
(
"versioncode"
));
String
oldVName
=
Strings
.
nullToEmpty
(
properties
.
getProperty
(
"versionname"
));
if
(!
newIcon
.
equals
(
oldIcon
))
{
if
(!
newIcon
.
equals
(
oldIcon
)
||
!
newVCode
.
equals
(
oldVCode
)
||
!
newVName
.
equals
(
oldVName
)
)
{
// Recreate the project.properties and upload it to storageIo.
// Recreate the project.properties and upload it to storageIo.
String
projectName
=
properties
.
getProperty
(
"name"
);
String
projectName
=
properties
.
getProperty
(
"name"
);
String
qualifiedName
=
properties
.
getProperty
(
"main"
);
String
qualifiedName
=
properties
.
getProperty
(
"main"
);
String
newContent
=
getProjectPropertiesFileContents
(
projectName
,
qualifiedName
,
newIcon
);
String
newContent
=
getProjectPropertiesFileContents
(
projectName
,
qualifiedName
,
newIcon
,
newVCode
,
newVName
);
storageIo
.
uploadFile
(
projectId
,
PROJECT_PROPERTIES_FILE_NAME
,
userId
,
storageIo
.
uploadFile
(
projectId
,
PROJECT_PROPERTIES_FILE_NAME
,
userId
,
newContent
,
StorageUtil
.
DEFAULT_CHARSET
);
newContent
,
StorageUtil
.
DEFAULT_CHARSET
);
}
}
...
@@ -240,7 +260,7 @@ public final class YoungAndroidProjectService extends CommonProjectService {
...
@@ -240,7 +260,7 @@ public final class YoungAndroidProjectService extends CommonProjectService {
String
propertiesFileName
=
PROJECT_PROPERTIES_FILE_NAME
;
String
propertiesFileName
=
PROJECT_PROPERTIES_FILE_NAME
;
String
propertiesFileContents
=
getProjectPropertiesFileContents
(
projectName
,
String
propertiesFileContents
=
getProjectPropertiesFileContents
(
projectName
,
qualifiedFormName
,
null
);
qualifiedFormName
,
null
,
null
,
null
);
String
formFileName
=
getFormPropertiesFileName
(
qualifiedFormName
);
String
formFileName
=
getFormPropertiesFileName
(
qualifiedFormName
);
String
formFileContents
=
getInitialFormPropertiesFileContents
(
qualifiedFormName
);
String
formFileContents
=
getInitialFormPropertiesFileContents
(
qualifiedFormName
);
...
@@ -256,7 +276,7 @@ public final class YoungAndroidProjectService extends CommonProjectService {
...
@@ -256,7 +276,7 @@ public final class YoungAndroidProjectService extends CommonProjectService {
project
.
addTextFile
(
new
TextFile
(
codeblocksFileName
,
codeblocksFileContents
));
project
.
addTextFile
(
new
TextFile
(
codeblocksFileName
,
codeblocksFileContents
));
// Create new project
// Create new project
return
storageIo
.
createProject
(
userId
,
project
,
getProjectSettings
(
""
));
return
storageIo
.
createProject
(
userId
,
project
,
getProjectSettings
(
""
,
"1"
,
"1.0"
));
}
}
@Override
@Override
...
@@ -268,6 +288,12 @@ public final class YoungAndroidProjectService extends CommonProjectService {
...
@@ -268,6 +288,12 @@ public final class YoungAndroidProjectService extends CommonProjectService {
String
icon
=
oldSettings
.
getSetting
(
String
icon
=
oldSettings
.
getSetting
(
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
,
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_ICON
);
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_ICON
);
String
vcode
=
oldSettings
.
getSetting
(
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_CODE
);
String
vname
=
oldSettings
.
getSetting
(
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
,
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_NAME
);
Project
newProject
=
new
Project
(
newName
);
Project
newProject
=
new
Project
(
newName
);
newProject
.
setProjectType
(
YoungAndroidProjectNode
.
YOUNG_ANDROID_PROJECT_TYPE
);
newProject
.
setProjectType
(
YoungAndroidProjectNode
.
YOUNG_ANDROID_PROJECT_TYPE
);
...
@@ -286,7 +312,7 @@ public final class YoungAndroidProjectService extends CommonProjectService {
...
@@ -286,7 +312,7 @@ public final class YoungAndroidProjectService extends CommonProjectService {
// name and qualified name.
// name and qualified name.
String
qualifiedFormName
=
StringUtils
.
getQualifiedFormName
(
String
qualifiedFormName
=
StringUtils
.
getQualifiedFormName
(
storageIo
.
getUser
(
userId
).
getUserEmail
(),
newName
);
storageIo
.
getUser
(
userId
).
getUserEmail
(),
newName
);
newContents
=
getProjectPropertiesFileContents
(
newName
,
qualifiedFormName
,
icon
);
newContents
=
getProjectPropertiesFileContents
(
newName
,
qualifiedFormName
,
icon
,
vcode
,
vname
);
}
else
{
}
else
{
// This is some file other than the project properties file.
// This is some file other than the project properties file.
// oldSourceFileName may contain the old project name as a path segment, surrounded by /.
// oldSourceFileName may contain the old project name as a path segment, surrounded by /.
...
@@ -309,7 +335,7 @@ public final class YoungAndroidProjectService extends CommonProjectService {
...
@@ -309,7 +335,7 @@ public final class YoungAndroidProjectService extends CommonProjectService {
}
}
// Create the new project and return the new project's id.
// Create the new project and return the new project's id.
return
storageIo
.
createProject
(
userId
,
newProject
,
getProjectSettings
(
icon
));
return
storageIo
.
createProject
(
userId
,
newProject
,
getProjectSettings
(
icon
,
vcode
,
vname
));
}
}
@Override
@Override
...
...
appinventor/appengine/src/com/google/appinventor/shared/settings/SettingsConstants.java
View file @
135acbca
...
@@ -27,4 +27,6 @@ public class SettingsConstants {
...
@@ -27,4 +27,6 @@ public class SettingsConstants {
// Project settings
// Project settings
public
static
final
String
YOUNG_ANDROID_SETTINGS_ICON
=
"Icon"
;
public
static
final
String
YOUNG_ANDROID_SETTINGS_ICON
=
"Icon"
;
public
static
final
String
YOUNG_ANDROID_SETTINGS_SHOW_HIDDEN_COMPONENTS
=
"ShowHiddenComponents"
;
public
static
final
String
YOUNG_ANDROID_SETTINGS_SHOW_HIDDEN_COMPONENTS
=
"ShowHiddenComponents"
;
public
static
final
String
YOUNG_ANDROID_SETTINGS_VERSION_CODE
=
"VersionCode"
;
public
static
final
String
YOUNG_ANDROID_SETTINGS_VERSION_NAME
=
"VersionName"
;
}
}
appinventor/appengine/tests/com/google/appinventor/server/ProjectServiceTest.java
View file @
135acbca
...
@@ -320,7 +320,9 @@ public class ProjectServiceTest {
...
@@ -320,7 +320,9 @@ public class ProjectServiceTest {
"name=Project2\n"
+
"name=Project2\n"
+
"assets=../assets\n"
+
"assets=../assets\n"
+
"source=../src\n"
+
"source=../src\n"
+
"build=../build\n"
);
"build=../build\n"
+
"versioncode=1\n"
+
"versionname=1.0\n"
);
expectedYaFiles2
.
put
(
"src/com/domain/noname/Project2/Screen1.scm"
,
expectedYaFiles2
.
put
(
"src/com/domain/noname/Project2/Screen1.scm"
,
YOUNG_ANDROID_PROJECT_SCM_SOURCE
);
YOUNG_ANDROID_PROJECT_SCM_SOURCE
);
assertEquals
(
expectedYaFiles2
,
getTextFiles
(
USER_ID_ONE
,
yaProject2
));
assertEquals
(
expectedYaFiles2
,
getTextFiles
(
USER_ID_ONE
,
yaProject2
));
...
@@ -458,7 +460,9 @@ public class ProjectServiceTest {
...
@@ -458,7 +460,9 @@ public class ProjectServiceTest {
String
loadedSettings
=
projectServiceImpl
.
loadProjectSettings
(
projectId
);
String
loadedSettings
=
projectServiceImpl
.
loadProjectSettings
(
projectId
);
assertEquals
(
assertEquals
(
"{\""
+
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
+
"\":"
+
"{\""
+
SettingsConstants
.
PROJECT_YOUNG_ANDROID_SETTINGS
+
"\":"
+
"{\""
+
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_ICON
+
"\":\"\"}}"
,
"{\""
+
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_ICON
+
"\":\"\",\""
+
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_CODE
+
"\":\"1\",\""
+
SettingsConstants
.
YOUNG_ANDROID_SETTINGS_VERSION_NAME
+
"\":\"1.0\"}}"
,
loadedSettings
);
loadedSettings
);
String
storedSettings
=
String
storedSettings
=
...
...
appinventor/blockslib/src/openblocks/yacodeblocks/BlockSaveFile.java
View file @
135acbca
...
@@ -719,6 +719,11 @@ public class BlockSaveFile {
...
@@ -719,6 +719,11 @@ public class BlockSaveFile {
// was added.
// was added.
blkCompVersion
=
6
;
blkCompVersion
=
6
;
}
}
if
(
blkCompVersion
<
7
)
{
// The VersionCode and VersionName properties were added. No blocks need to be modified
// to update to version 7.
blkCompVersion
=
7
;
}
return
blkCompVersion
;
return
blkCompVersion
;
}
}
...
...
appinventor/buildserver/src/com/google/appinventor/buildserver/Compiler.java
View file @
135acbca
...
@@ -59,6 +59,9 @@ public final class Compiler {
...
@@ -59,6 +59,9 @@ public final class Compiler {
private
static
final
String
DEFAULT_ICON
=
private
static
final
String
DEFAULT_ICON
=
RUNTIME_FILES_DIR
+
"ya.png"
;
RUNTIME_FILES_DIR
+
"ya.png"
;
private
static
final
String
DEFAULT_VERSION_CODE
=
"1"
;
private
static
final
String
DEFAULT_VERSION_NAME
=
"1.0"
;
private
static
final
String
COMPONENT_PERMISSIONS
=
private
static
final
String
COMPONENT_PERMISSIONS
=
RUNTIME_FILES_DIR
+
"simple_components_permissions.json"
;
RUNTIME_FILES_DIR
+
"simple_components_permissions.json"
;
...
@@ -158,6 +161,10 @@ public final class Compiler {
...
@@ -158,6 +161,10 @@ public final class Compiler {
String
packageName
=
Signatures
.
getPackageName
(
mainClass
);
String
packageName
=
Signatures
.
getPackageName
(
mainClass
);
String
className
=
Signatures
.
getClassName
(
mainClass
);
String
className
=
Signatures
.
getClassName
(
mainClass
);
String
projectName
=
project
.
getProjectName
();
String
projectName
=
project
.
getProjectName
();
String
vCode
=
(
project
.
getVCode
()
==
null
)
?
DEFAULT_VERSION_CODE
:
project
.
getVCode
();
String
vName
=
(
project
.
getVName
()
==
null
)
?
DEFAULT_VERSION_NAME
:
project
.
getVName
();
LOG
.
log
(
Level
.
INFO
,
"VCode: "
+
project
.
getVCode
());
LOG
.
log
(
Level
.
INFO
,
"VName: "
+
project
.
getVName
());
// TODO(user): Use com.google.common.xml.XmlWriter
// TODO(user): Use com.google.common.xml.XmlWriter
try
{
try
{
...
@@ -171,7 +178,7 @@ public final class Compiler {
...
@@ -171,7 +178,7 @@ public final class Compiler {
"package=\""
+
packageName
+
"\" "
+
"package=\""
+
packageName
+
"\" "
+
// TODO(markf): uncomment the following line when we're ready to enable publishing to the
// TODO(markf): uncomment the following line when we're ready to enable publishing to the
// Android Market.
// Android Market.
"android:versionCode=\"
3\" "
+
"android:versionName=\"1.5
\" "
+
"android:versionCode=\"
"
+
vCode
+
"\" "
+
"android:versionName=\""
+
vName
+
"
\" "
+
">\n"
);
">\n"
);
for
(
String
permission
:
permissionsNeeded
)
{
for
(
String
permission
:
permissionsNeeded
)
{
out
.
write
(
" <uses-permission android:name=\""
+
permission
+
"\" />\n"
);
out
.
write
(
" <uses-permission android:name=\""
+
permission
+
"\" />\n"
);
...
...
appinventor/buildserver/src/com/google/appinventor/buildserver/Project.java
View file @
135acbca
...
@@ -61,6 +61,8 @@ public final class Project {
...
@@ -61,6 +61,8 @@ public final class Project {
* main - qualified name of main form class
* main - qualified name of main form class
* name - application name
* name - application name
* icon - application icon
* icon - application icon
* versioncode - version code
* versionname - version name
* source - comma separated list of source root directories
* source - comma separated list of source root directories
* assets - assets directory (for image and data files bundled with the application)
* assets - assets directory (for image and data files bundled with the application)
* build - output directory for the compiler
* build - output directory for the compiler
...
@@ -69,6 +71,8 @@ public final class Project {
...
@@ -69,6 +71,8 @@ public final class Project {
private
static
final
String
NAMETAG
=
"name"
;
private
static
final
String
NAMETAG
=
"name"
;
private
static
final
String
ICONTAG
=
"icon"
;
private
static
final
String
ICONTAG
=
"icon"
;
private
static
final
String
SOURCETAG
=
"source"
;
private
static
final
String
SOURCETAG
=
"source"
;
private
static
final
String
VCODETAG
=
"versioncode"
;
private
static
final
String
VNAMETAG
=
"versionname"
;
private
static
final
String
ASSETSTAG
=
"assets"
;
private
static
final
String
ASSETSTAG
=
"assets"
;
private
static
final
String
BUILDTAG
=
"build"
;
private
static
final
String
BUILDTAG
=
"build"
;
...
@@ -184,6 +188,42 @@ public final class Project {
...
@@ -184,6 +188,42 @@ public final class Project {
properties
.
setProperty
(
ICONTAG
,
icon
);
properties
.
setProperty
(
ICONTAG
,
icon
);
}
}
/**
* Returns the version code.
*
* @return version code
*/
public
String
getVCode
()
{
return
properties
.
getProperty
(
VCODETAG
);
}
/**
* Sets the version code.
*
* @param vcode version code
*/
public
void
setVCode
(
String
vcode
)
{
properties
.
setProperty
(
VCODETAG
,
vcode
);
}
/**
* Returns the version name.
*
* @return version name
*/
public
String
getVName
()
{
return
properties
.
getProperty
(
VNAMETAG
);
}
/**
* Sets the version name.
*
* @param vname version name
*/
public
void
setVName
(
String
vname
)
{
properties
.
setProperty
(
VNAMETAG
,
vname
);
}
/**
/**
* Returns the project directory. This directory contains the project.properties file.
* Returns the project directory. This directory contains the project.properties file.
*
*
...
...
appinventor/components/src/com/google/appinventor/components/common/YaVersion.java
View file @
135acbca
...
@@ -174,8 +174,10 @@ public class YaVersion {
...
@@ -174,8 +174,10 @@ public class YaVersion {
// - LOCATIONSENSOR_COMPONENT_VERSION was incremented to 2
// - LOCATIONSENSOR_COMPONENT_VERSION was incremented to 2
// For YOUNG_ANDROID_VERSION 57:
// For YOUNG_ANDROID_VERSION 57:
// - PLAYER_COMPONENT_VERSION was incremented to 4.
// - PLAYER_COMPONENT_VERSION was incremented to 4.
// For YOUNG_ANDROID_VERSION 58:
// - FORM_COMPONENT_VERSION was incremented to 7.
public
static
final
int
YOUNG_ANDROID_VERSION
=
5
7
;
public
static
final
int
YOUNG_ANDROID_VERSION
=
5
8
;
// ............................... Blocks Language Version Number ...............................
// ............................... Blocks Language Version Number ...............................
...
@@ -339,7 +341,9 @@ public class YaVersion {
...
@@ -339,7 +341,9 @@ public class YaVersion {
// For FORM_COMPONENT_VERSION 6:
// For FORM_COMPONENT_VERSION 6:
// - The SwitchForm and SwitchFormWithArgs methods were removed and the OtherScreenClosed event
// - The SwitchForm and SwitchFormWithArgs methods were removed and the OtherScreenClosed event
// was added.
// was added.
public
static
final
int
FORM_COMPONENT_VERSION
=
6
;
// For FORM_COMPONENT_VERSION 7:
// - The VersionCode and VersionName properties were added.
public
static
final
int
FORM_COMPONENT_VERSION
=
7
;
public
static
final
int
FUSIONTABLESCONTROL_COMPONENT_VERSION
=
1
;
public
static
final
int
FUSIONTABLESCONTROL_COMPONENT_VERSION
=
1
;
...
...
appinventor/components/src/com/google/appinventor/components/runtime/Form.java
View file @
135acbca
...
@@ -690,6 +690,30 @@ public class Form extends Activity
...
@@ -690,6 +690,30 @@ public class Form extends Activity
// We don't actually need to do anything.
// We don't actually need to do anything.
}
}
/**
* Specifies the Version Code.
*
* @param vCode the version name of the application
*/
@DesignerProperty
(
editorType
=
PropertyTypeConstants
.
PROPERTY_TYPE_NON_NEGATIVE_INTEGER
,
defaultValue
=
"1"
)
@SimpleProperty
(
userVisible
=
false
)
public
void
VersionCode
(
int
vCode
)
{
// We don't actually need to do anything.
}
/**
* Specifies the Version Name.
*
* @param vName the version name of the application
*/
@DesignerProperty
(
editorType
=
PropertyTypeConstants
.
PROPERTY_TYPE_STRING
,
defaultValue
=
"1.0"
)
@SimpleProperty
(
userVisible
=
false
)
public
void
VersionName
(
String
vName
)
{
// We don't actually need to do anything.
}
/**
/**
* Width property getter method.
* Width property getter method.
*
*
...
...
appinventor/docs/learn/reference/components/basic.html
View file @
135acbca
...
@@ -1271,6 +1271,24 @@
...
@@ -1271,6 +1271,24 @@
the application runs. A natural choice for the title is the title of the App, but
the application runs. A natural choice for the title is the title of the App, but
you could make it something else, or even change it while the app is running.
you could make it something else, or even change it while the app is running.
</dd>
</dd>
<dt>
<code>
VersionCode
</code>
</dt>
<dd>
An integer value which must be incremented each time a new Android Application Package
File (APK) is created for the Google Play Store.
</dd>
<dt>
<code>
VersionName
</code>
</dt>
<dd>
A string which can be changed to allow Google Play Store users to distinguish between
different versions of the App.
</dd>
<dt>
<dt>
<code
class=
"c2"
>
<code
class=
"c2"
>
Width
Width
...
...
appinventor/docs/learn/reference/other/appstoplay.html
View file @
135acbca
...
@@ -37,6 +37,29 @@
...
@@ -37,6 +37,29 @@
</h1>
</h1>
Applications built with App Inventor can be uploaded to Google Play!
Applications built with App Inventor can be uploaded to Google Play!
<dl>
<dl>
<dt>
<h2>
Version Your App
</h2>
</dt>
<dd>
<p>
Every app you publish must have a
<code>
VersionCode
</code>
and a
<code>
VersionName
</code>
. You can set these in the designer under the
properties panel for the
<code>
Screen1
</code>
component.
</p>
<p>
<code>
VersionCode
</code>
is an integer value that will not be visible to
Google Play Store users. It is used by other apps to check if your app
has been upgraded or downgraded. It defaults to 1 and should be increased by
one with every successive change whether it is a major change or a minor change.
</p>
<p>
<code>
VersionName
</code>
is a String which can be anything you would like. It is
defaulted to 1.0. A common structure is a decimal number which is
increased by 1 for every major change and 0.1 for every minor change. For example,
an initial
<code>
VersionName
</code>
could be 1.0 which can be updated to 1.1 after
a small change and 2.0 after a larger change.
</p>
</dd>
<dt>
<dt>
<h2>
Download
<code>
.apk
</code></h2>
<h2>
Download
<code>
.apk
</code></h2>
</dt>
</dt>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment