<!--

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You 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

http://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.

-->

Apache Flex
Copyright 2018 The Apache Software Foundation

Apache Flex SDK Installer 3.3.2

Installer Issues Resolved:
FLEX-35388 - Installer fails to pull SDK

Apache Flex SDK Installer 3.3.1

Installer Issues Resolved:
FLEX-35381 - Apache Flex Installer download fails for OSMF

Apache Flex SDK Installer 3.3

Installer Issues Resolved:
FLEX-35295: Unable to download 4.16.0 with Air 25

Apache Flex SDK Installer 3.2

Ant_On_AIR improvements:
1. add en_AU locale.
2. check free disk space.
3. istrue and isfalse conditions
4. workaround for Get task on SourceForge mirrors
5. use flash.globalization.DateTimeFormatter to remove dependency on Flex SDK
6. replacetoken and replacevalue tags
7. fix failure message propagation from child ant scripts

Installer Issues Resolved:
FLEX-34851: Flex SDK Installer Fails on swfobject for flex versions 4.13.0 and below
FLEX-34762: OSMF download failed - Apache Flex Installer
FLEX-34687: Error #1009 encountered when changing languages on License Screen
FLEX-34638: adt.bat missing from SDK
FLEX-34624: Additional Logging for installer
FLEX-34623: Russian translation
FLEX-34606: Redundant variable
FLEX-34605: Code formatting and cleanup
FLEX-34591: Don't log FP and AIR versions for products that don't use them
FLEX-34590: Don't assume installer.xml exists
FLEX-34589: Set install XML file via command line option
FLEX-34559: Apache Flex SDK Installer - OSMF download failed
FLEX-34534: Installer breaks on afe.jar when using a cached install (but proceeds correctly with cache switched off)
FLEX-34533: Installer install font jar even when not ticked
FLEX-34446: Common windows installer error
FLEX-34445: some errors in installer are missing info=
FLEX-34425: Make MD5 change non fatal
FLEX-34408: Installer log does't contain version of Flex SDK installed
FLEX-34398: log not saved when installer close button clicked
FLEX-34394: some localization strings mention Adobe Flash Builder in the installer title
FLEX-34393: installer should remember language
FLEX-34392: Missing localization strings in the installer
FLEX-34310: Add button "back" to installer

Other Installer Improvements:
1. Fine-tuned some Chinese Translations
2. Added step/install override config option. Remove horizontal scrollbar on license list
3. add user abort message to en_US
4. make clear the version logged is the installer version
5. no need to log error twice + stop RTE when no internet connection
6. Russian translation
7. Updated README in installer doc to include JetBrains IntelliJ IDEA instructions.
8. dded ApacheURLLoader component that extends URLLoader.  This new component is only different from URLLoader in that it looks for https connections and uses as3httpclient for these connections.


Apache Flex SDK Installer 3.1
1. Fixed bugs in ant_on_air library to support more checksums in installer scripts.
2. Reports more information when an install fails or is aborted.
3. Caching is now implemented in the ant scripts.  This means that Apache Flex SDK
   4.12.1 and earlier will not use the download cache and may install more slowly.
4. Minor UI/usability improvements
5. Installer log now saved to disk in installation directory

Apache Flex SDK Installer 3.0
1. Now uses external localized strings
2. Added support for install scripts based on Apache Ant

Apache Flex SDK Installer 2.7
1. Added support for OSMF2.0 [http://blogs.adobe.com/osmf/2012/03/osmf-2-0-now-available.html]
   From Apache Flex 4.11.0 onwards, support for OSMF2.0 has been added.  
2. The osmf.swf RSL now gets generated by the Installer.  

Apache Flex SDK Installer 2.6
Here is a list of significant issues that were fixed with this release:
1. Able to select which version of AIR and Flash Player to use.

Apache Flex SDK Installer 2.5

Issues addressed in this release:
Here is a list of significant issues that were fixed with this release:
1.  Enable Flex SDK download stats tracking
2.  https://issues.apache.org/jira/browse/FLEX-33426 (UI fix for license screen (show regular checkboxes))
3.  https://issues.apache.org/jira/browse/FLEX-33151 (Auto-update logic fix)
4.  French and Dutch language locale fixes.
5.  Added the SDK version number to be downloaded in the window title.
6.  https://issues.apache.org/jira/browse/FLEX-33202 (more issues).
7.  https://issues.apache.org/jira/browse/FLEX-33419 (added german language).


Apache Flex SDK Installer 2.0
1.  If you have previously installed a release candidate (RC) version of
    Apache Flex SDK Installer, you need to uninstall it first.  
    And then run the downloaded installer file.
2.  From Flex 4.9 onwards, the Text Layout Framework (TLF) is part of the Flex SDK.  
    So the installer does not download it separately anymore.
3.  By default, Apache Flex SDK Installer 2.0 downloads Adobe Flash Player 11.1 
    and Adobe AIR SDK 3.4.  If you want to change it to any other supported 
    combination, save a copy of the config file found at: 
       http://incubator.apache.org/flex/sdk-installer-config-2.0.xml, 
    modify the download urls to point to the required versions.  Then run the app 
    from command line mode with the optional command line parameter:
	 -config=<path to config file>.  
    The new urls will be used to download the required dependencies.

Issues addressed in this release:
Here is a list of significant issues that were fixed with this release:
1.  https://issues.apache.org/jira/browse/FLEX-33214 (Fix UI of license screen)
2.  https://issues.apache.org/jira/browse/FLEX-33122 (Enable language switching)
    Available languages: English(US), English(AU), English(GB), Español (ES), 
                         Français, Greek, Nederlands and Português

Apache Flex Installer SDK 1.0

1.  If you have previously installed a pre-release version of  Apache Flex SDK Installer, you need to uninstall it first.  And then run the downloaded installer file.
