-
-
-
-
-
-
-
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 6b156fe..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,675 +0,0 @@
-GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- {one line to give the program's name and a brief idea of what it does.}
- Copyright (C) {year} {name of author}
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- {project} Copyright (C) {year} {fullname}
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-.
-
diff --git a/README.md b/README.md
index 768022b..5ab095d 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-Morse Converter Android App
-===========================
+# Material Design
+<<<<<<< HEAD
A writtenMorse and normal morse code converter for Android. You can find more information about this app on http://marcel-kapfer.de/projects/morse/.
## Contribute
@@ -16,3 +16,15 @@ You can also check out the issues and the Trello board.
## Trello Board
[Feature & Development Board](https://trello.com/b/SGMIGVbI/morse-android)
+=======
+This is the branch where the material design is created
+
+## Progress
+
+At the moment the whole app is ready to publish but I will waite a few hours and search for bugs.
+
+## Design
+
+This is how it will look like:
+![Image](http://marcel-kapfer.de/res/blog/20150218/with-background.png)
+>>>>>>> material
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/app.iml b/app/app.iml
index a406f2e..d3de3bf 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -81,9 +81,14 @@
-
+
-
+
+
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index a7f3f16..cbd179e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,23 +1,32 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 19
- buildToolsVersion "21.1.1"
+ compileSdkVersion 21
+ buildToolsVersion "21.1.2"
defaultConfig {
applicationId "de.marcelkapfer.morseconverter"
- minSdkVersion 14
- targetSdkVersion 19
+ minSdkVersion 11
+ targetSdkVersion 21
+ versionCode 3
+ versionName "2.0"
}
-
buildTypes {
release {
minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
-dependencies {
- compile 'com.android.support:support-v4:19.1.0'
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ compile 'com.android.support:appcompat-v7:21.0.3'
+ compile 'it.neokree:MaterialNavigationDrawer:1.3'
+ compile 'com.android.support:cardview-v7:21.0.3'
+ compile 'com.android.support:support-v4:21.0.3'
}
diff --git a/app/lint.xml b/app/lint.xml
deleted file mode 100644
index 5eb30f7..0000000
--- a/app/lint.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/manifest-merger-release-report.txt b/app/manifest-merger-release-report.txt
index fb5d23a..8c215fa 100644
--- a/app/manifest-merger-release-report.txt
+++ b/app/manifest-merger-release-report.txt
@@ -1,69 +1,67 @@
-- Merging decision tree log ---
manifest
-ADDED from AndroidManifest.xml:2:1
+ADDED from AndroidManifest.xml:23:1
package
- ADDED from AndroidManifest.xml:2:11
+ ADDED from AndroidManifest.xml:24:5
INJECTED from AndroidManifest.xml:0:0
INJECTED from AndroidManifest.xml:0:0
android:versionName
- ADDED from AndroidManifest.xml:4:5
- android:versionCode
- ADDED from AndroidManifest.xml:3:5
INJECTED from AndroidManifest.xml:0:0
INJECTED from AndroidManifest.xml:0:0
xmlns:android
- ADDED from AndroidManifest.xml:4:31
-uses-sdk
-ADDED from AndroidManifest.xml:6:5
- android:targetSdkVersion
- ADDED from AndroidManifest.xml:8:9
- INJECTED from AndroidManifest.xml:0:0
- INJECTED from AndroidManifest.xml:0:0
- android:minSdkVersion
- ADDED from AndroidManifest.xml:7:9
+ ADDED from AndroidManifest.xml:23:11
+ android:versionCode
INJECTED from AndroidManifest.xml:0:0
INJECTED from AndroidManifest.xml:0:0
application
-ADDED from AndroidManifest.xml:10:5
+ADDED from AndroidManifest.xml:26:5
+MERGED from com.android.support:appcompat-v7:21.0.3:16:5
+MERGED from com.android.support:support-v4:21.0.3:16:5
+MERGED from it.neokree:MaterialNavigationDrawer:1.3:14:5
+MERGED from com.github.markushi:android-ui:1.2:9:5
+MERGED from com.android.support:appcompat-v7:21.0.3:16:5
+MERGED from com.android.support:support-v4:21.0.3:16:5
+MERGED from com.android.support:cardview-v7:21.0.3:16:5
+MERGED from com.android.support:support-v4:21.0.3:16:5
android:label
- ADDED from AndroidManifest.xml:13:9
+ ADDED from AndroidManifest.xml:29:9
android:allowBackup
- ADDED from AndroidManifest.xml:11:9
+ ADDED from AndroidManifest.xml:27:9
android:icon
- ADDED from AndroidManifest.xml:12:9
- android:theme
- ADDED from AndroidManifest.xml:14:9
+ ADDED from AndroidManifest.xml:28:9
activity#de.marcelkapfer.morseconverter.MainActivity
-ADDED from AndroidManifest.xml:16:8
+ADDED from AndroidManifest.xml:30:9
android:label
- ADDED from AndroidManifest.xml:18:13
- android:windowSoftInputMode
- ADDED from AndroidManifest.xml:19:13
+ ADDED from AndroidManifest.xml:32:13
+ android:theme
+ ADDED from AndroidManifest.xml:33:13
android:name
- ADDED from AndroidManifest.xml:17:13
+ ADDED from AndroidManifest.xml:31:13
intent-filter#android.intent.action.MAIN+android.intent.category.LAUNCHER
-ADDED from AndroidManifest.xml:20:13
+ADDED from AndroidManifest.xml:34:13
action#android.intent.action.MAIN
-ADDED from AndroidManifest.xml:21:17
+ADDED from AndroidManifest.xml:35:17
android:name
- ADDED from AndroidManifest.xml:21:25
+ ADDED from AndroidManifest.xml:35:25
category#android.intent.category.LAUNCHER
-ADDED from AndroidManifest.xml:23:17
+ADDED from AndroidManifest.xml:37:17
android:name
- ADDED from AndroidManifest.xml:23:27
-activity#de.marcelkapfer.morseconverter.DisplayMessageActivity
-ADDED from AndroidManifest.xml:26:9
- android:label
- ADDED from AndroidManifest.xml:28:13
- android:parentActivityName
- ADDED from AndroidManifest.xml:29:13
- android:immersive
- ADDED from AndroidManifest.xml:29:86
- android:name
- ADDED from AndroidManifest.xml:27:13
-meta-data#android.support.PARENT_ACTIVITY
-ADDED from AndroidManifest.xml:30:13
- android:value
- ADDED from AndroidManifest.xml:32:17
- android:name
- ADDED from AndroidManifest.xml:31:17
+ ADDED from AndroidManifest.xml:37:27
+uses-sdk
+INJECTED from AndroidManifest.xml:0:0 reason: use-sdk injection requested
+MERGED from com.android.support:appcompat-v7:21.0.3:15:5
+MERGED from com.android.support:support-v4:21.0.3:15:5
+MERGED from it.neokree:MaterialNavigationDrawer:1.3:8:5
+MERGED from com.github.markushi:android-ui:1.2:7:5
+MERGED from com.android.support:appcompat-v7:21.0.3:15:5
+MERGED from com.android.support:support-v4:21.0.3:15:5
+MERGED from com.android.support:cardview-v7:21.0.3:15:5
+MERGED from com.android.support:support-v4:21.0.3:15:5
+ tools:overrideLibrary
+ ADDED from it.neokree:MaterialNavigationDrawer:1.3:11:9
+ android:targetSdkVersion
+ INJECTED from AndroidManifest.xml:0:0
+ INJECTED from AndroidManifest.xml:0:0
+ android:minSdkVersion
+ INJECTED from AndroidManifest.xml:0:0
+ INJECTED from AndroidManifest.xml:0:0
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..124af58
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /home/mmk/android-sdks/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# 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 *;
+#}
diff --git a/app/src/androidTest/java/de/marcelkapfer/morseconverter/ApplicationTest.java b/app/src/androidTest/java/de/marcelkapfer/morseconverter/ApplicationTest.java
new file mode 100644
index 0000000..c2f6626
--- /dev/null
+++ b/app/src/androidTest/java/de/marcelkapfer/morseconverter/ApplicationTest.java
@@ -0,0 +1,13 @@
+package de.marcelkapfer.morseconverter;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+/**
+ * Testing Fundamentals
+ */
+public class ApplicationTest extends ApplicationTestCase {
+ public ApplicationTest() {
+ super(Application.class);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bce11b9..4d7cf08 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -19,41 +19,24 @@
Marcel Michael Kapfer
marcelmichaelkapfer@yahoo.co.nz
- Version 1.0.1
-
-->
-
-
-
+
-
-
+
+ android:theme="@style/AppTheme">
-
-
-
diff --git a/app/src/main/java/de/marcelkapfer/morseconverter/AboutFragment.java b/app/src/main/java/de/marcelkapfer/morseconverter/AboutFragment.java
new file mode 100644
index 0000000..2865029
--- /dev/null
+++ b/app/src/main/java/de/marcelkapfer/morseconverter/AboutFragment.java
@@ -0,0 +1,38 @@
+package de.marcelkapfer.morseconverter;
+
+/*
+ This is a Android application for converting writtenMorse and normal morse code.
+ Copyright (C) 2014-2015 Marcel Michael Kapfer
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+ Marcel Michael Kapfer
+ marcelmichaelkapfer@yahoo.co.nz
+
+ */
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Created by mmk on 2/14/15.
+ */
+public class AboutFragment extends Fragment{
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
+ return inflater.inflate(R.layout.fragment_about, container, false);
+ }
+}
diff --git a/app/src/main/java/de/marcelkapfer/morseconverter/DecodeNormalMorseManager.java b/app/src/main/java/de/marcelkapfer/morseconverter/DecodeNormalMorseManager.java
new file mode 100644
index 0000000..4b5233e
--- /dev/null
+++ b/app/src/main/java/de/marcelkapfer/morseconverter/DecodeNormalMorseManager.java
@@ -0,0 +1,262 @@
+package de.marcelkapfer.morseconverter;
+
+/*
+ This is a Android application for converting writtenMorse and normal morse code.
+ Copyright (C) 2014-2015 Marcel Michael Kapfer
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+ Marcel Michael Kapfer
+ marcelmichaelkapfer@yahoo.co.nz
+
+ */
+
+public class DecodeNormalMorseManager {
+
+ private String inputMessage;
+
+ DecodeNormalMorseManager(String string) {
+ inputMessage = string;
+ }
+
+ public void setString(String string) {
+ inputMessage = string;
+ }
+
+ public String getString() {
+ return inputMessage;
+ }
+
+ /*
+ * Code for converting normal letters into morse code
+ */
+
+ public String getDecodedString() {
+ StringBuffer message = new StringBuffer(inputMessage);
+ if (message.toString().endsWith(" ")) {
+ message = message.deleteCharAt(message.length() - 1);
+ }
+ // Variables
+ // Variables
+ StringBuffer input = new StringBuffer();
+ input = input.replace(0, input.length(), message.toString().toUpperCase());
+ StringBuffer output = new StringBuffer();
+ if (input.toString().equals("")) {
+ output.replace(0, output.length(), "Please enter at least one character");
+ } else if (input.toString().equals("LETTERSPACE")) {
+ output.replace(0, output.length(), " ");
+ } else if (input.toString().equals("END OF WORK")) {
+ output.replace(0, output.length(), "...-.-");
+ } else if (input.toString().equals("ERROR")) {
+ output.replace(0, output.length(), "........");
+ } else if (input.toString().equals("STARTING SIGNAL")) {
+ output.replace(0, output.length(), "-.-.-");
+ } else if (input.toString().equals("ENDING SIGNAL")) {
+ output.replace(0, output.length(), ".-.-.");
+ } else if (input.toString().equals("UNDERSTOOD")) {
+ output.replace(0, output.length(), "...-.");
+ } else if (input.toString().equals("WAIT")) {
+ output.replace(0, output.length(), ".-...");
+ } else if (input.toString().equals("SOS")) {
+ output.replace(0, output.length(), "...---...");
+ } else if (input.toString().equals("LETTER SPACE")) {
+ output.replace(0, output.length(), " ");
+ } else if (input.toString().equals("WORD SPACE")) {
+ output.replace(0, output.length(), " ");
+ } else {
+ for (int c = input.length(); c > 0; c--) {
+ if (input.toString().startsWith(" ")) {
+ if (output.toString().endsWith(" ")) {
+ output.delete(output.length() - 3, output.length());
+ }
+ output.append(" ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("A")) {
+ output.append(".- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("B")) {
+ output.append("-... ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("C")) {
+ output.append("-.-. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("D")) {
+ output.append("-.. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("E")) {
+ output.append(". ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("F")) {
+ output.append("..-. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("G")) {
+ output.append("--. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("H")) {
+ output.append(".... ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("I")) {
+ output.append(".. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("J")) {
+ output.append(".--- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("K")) {
+ output.append("-.- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("L")) {
+ output.append(".-.. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("M")) {
+ output.append("-- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("N")) {
+ output.append("-. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("O")) {
+ output.append("--- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("P")) {
+ output.append(".--. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Q")) {
+ output.append("--.- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("R")) {
+ output.append(".-. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("S")) {
+ output.append("... ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("T")) {
+ output.append("- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("U")) {
+ output.append("..- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("V")) {
+ output.append("...- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("W")) {
+ output.append(".-- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("X")) {
+ output.append("-..- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Y")) {
+ output.append("-.-- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Z")) {
+ output.append("--.. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("0")) {
+ output.append("----- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("1")) {
+ output.append(".---- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("2")) {
+ output.append("..--- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("3")) {
+ output.append("...-- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("4")) {
+ output.append("....- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("5")) {
+ output.append("..... ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("6")) {
+ output.append("-.... ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("7")) {
+ output.append("--... ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("8")) {
+ output.append("---.. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("9")) {
+ output.append("----. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Ä")) {
+ output.append(".-.- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Ö")) {
+ output.append("---. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Ü")) {
+ output.append("..-- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("ß")) {
+ output.append("...--... ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith(".")) {
+ output.append(".-.-.- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith(",")) {
+ output.append("--..-- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith(":")) {
+ output.append("---... ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith(";")) {
+ output.append("-.-.-. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("?")) {
+ output.append("..--.. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("!")) {
+ output.append("-.-.-- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("-")) {
+ output.append("-....- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("_")) {
+ output.append("..--.- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("(")) {
+ output.append("-.--. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith(")")) {
+ output.append("-.--.- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("=")) {
+ output.append("-...- ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("+")) {
+ output.append(".-.-. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("/")) {
+ output.append("-..-. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("@")) {
+ output.append(".--.-. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("'")) {
+ output.append(".----. ");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("$")) {
+ output.append("...-..- ");
+ input.delete(0, 1);
+ } else {
+ output.replace(0, output.length(), "Code not listed or wrong.");
+ }
+ }
+ if (output.toString().endsWith(" ")) {
+ output.delete(output.length() - 3, output.length());
+ }
+ }
+ return output.toString();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/marcelkapfer/morseconverter/DecodeWrittenMorseManager.java b/app/src/main/java/de/marcelkapfer/morseconverter/DecodeWrittenMorseManager.java
new file mode 100644
index 0000000..6347f24
--- /dev/null
+++ b/app/src/main/java/de/marcelkapfer/morseconverter/DecodeWrittenMorseManager.java
@@ -0,0 +1,261 @@
+package de.marcelkapfer.morseconverter;
+
+/*
+ This is a Android application for converting writtenMorse and normal morse code.
+ Copyright (C) 2014-2015 Marcel Michael Kapfer
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+ Marcel Michael Kapfer
+ marcelmichaelkapfer@yahoo.co.nz
+
+ */
+
+public class DecodeWrittenMorseManager {
+
+ private String inputMessage;
+
+ DecodeWrittenMorseManager(String string) {
+ inputMessage = string;
+ }
+
+ public void setString(String string) {
+ inputMessage = string;
+ }
+
+ public String getString() {
+ return inputMessage;
+ }
+
+ /*
+ * Code for converting latin letters into written morse
+ */
+ public String getDecodedString() {
+ StringBuffer message = new StringBuffer(inputMessage);
+ if (message.toString().endsWith(" ")) {
+ message = message.deleteCharAt(message.length() - 1);
+ }
+ // Variables
+ StringBuffer input = new StringBuffer();
+ input = input.replace(0, input.length(), message.toString().toUpperCase());
+ StringBuffer output = new StringBuffer();
+ if (input.toString().equals("")) {
+ output.replace(0, output.length(), "Please enter at least one character");
+ } else if (input.toString().equals("LETTERSPACE")) {
+ output.replace(0, output.length(), "#");
+ } else if (input.toString().equals("END OF WORK")) {
+ output.replace(0, output.length(), "000101");
+ } else if (input.toString().equals("ERROR")) {
+ output.replace(0, output.length(), "00000000");
+ } else if (input.toString().equals("STARTING SIGNAL")) {
+ output.replace(0, output.length(), "10101");
+ } else if (input.toString().equals("ENDING SIGNAL")) {
+ output.replace(0, output.length(), "01010");
+ } else if (input.toString().equals("UNDERSTOOD")) {
+ output.replace(0, output.length(), "00010");
+ } else if (input.toString().equals("WAIT")) {
+ output.replace(0, output.length(), "01000");
+ } else if (input.toString().equals("SOS")) {
+ output.replace(0, output.length(), "000111000");
+ } else if (input.toString().equals("LETTER SPACE")) {
+ output.replace(0, output.length(), "##");
+ } else if (input.toString().equals("WORD SPACE")) {
+ output.replace(0, output.length(), "+");
+ } else {
+ for (int c = input.length(); c > 0; c--) {
+
+ if (input.toString().startsWith(" ")) {
+ if (output.toString().endsWith("#")) {
+ output.delete(output.length() - 1, output.length());
+ }
+ output.append("+");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("A")) {
+ output.append("01#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("B")) {
+ output.append("1000#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("C")) {
+ output.append("1010#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("D")) {
+ output.append("100#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("E")) {
+ output.append("0#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("F")) {
+ output.append("0010#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("G")) {
+ output.append("110#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("H")) {
+ output.append("0000#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("I")) {
+ output.append("00#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("J")) {
+ output.append("0111#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("K")) {
+ output.append("101#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("L")) {
+ output.append("0100#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("M")) {
+ output.append("11#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("N")) {
+ output.append("10#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("O")) {
+ output.append("111#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("P")) {
+ output.append("0110#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Q")) {
+ output.append("1101#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("R")) {
+ output.append("010#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("S")) {
+ output.append("000#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("T")) {
+ output.append("1#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("U")) {
+ output.append("001#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("V")) {
+ output.append("0001#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("W")) {
+ output.append("011#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("X")) {
+ output.append("1001#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Y")) {
+ output.append("1011#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Z")) {
+ output.append("1100#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("0")) {
+ output.append("11111#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("1")) {
+ output.append("01111#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("2")) {
+ output.append("00111#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("3")) {
+ output.append("00011#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("4")) {
+ output.append("00001#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("5")) {
+ output.append("00000#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("6")) {
+ output.append("10000#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("7")) {
+ output.append("11000#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("8")) {
+ output.append("11100#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("9")) {
+ output.append("11110#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Ä")) {
+ output.append("0101#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Ö")) {
+ output.append("1110#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("Ü")) {
+ output.append("0011#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("ß")) {
+ output.append("00011000#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith(".")) {
+ output.append("010101#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith(",")) {
+ output.append("110011#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith(":")) {
+ output.append("111000#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith(";")) {
+ output.append("101010#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("?")) {
+ output.append("001100#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("!")) {
+ output.append("101011#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("-")) {
+ output.append("100001#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("_")) {
+ output.append("001101#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("(")) {
+ output.append("10110#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith(")")) {
+ output.append("101101#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("=")) {
+ output.append("10001#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("+")) {
+ output.append("01010#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("/")) {
+ output.append("10010#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("@")) {
+ output.append("011010#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("'")) {
+ output.append("011110#");
+ input.delete(0, 1);
+ } else if (input.toString().startsWith("$")) {
+ output.append("0001001#");
+ input.delete(0, 1);
+ } else {
+ output.replace(0, output.length(), "Code not listed or wrong.");
+ }
+ }
+ if (output.toString().endsWith("#")) {
+ output.delete(output.length() - 1, output.length());
+ }
+ }
+ return output.toString();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/marcelkapfer/morseconverter/DisplayMessageActivity.java b/app/src/main/java/de/marcelkapfer/morseconverter/DisplayMessageActivity.java
deleted file mode 100644
index 70ae0a0..0000000
--- a/app/src/main/java/de/marcelkapfer/morseconverter/DisplayMessageActivity.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * This is a Android application for converting writtenMorse and normal morse code.
- * Copyright (C) 2014-2015 Marcel Michael Kapfer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- * Marcel Michael Kapfer
- * marcelmichaelkapfer@yahoo.co.nz
- *
- * Version 1.0.1
- */
-
-package de.marcelkapfer.morseconverter;
-
-import android.app.Fragment;
-import android.content.Intent;
-import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-
-
-public class DisplayMessageActivity extends FragmentActivity {
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // Get the message from the intent
- Intent intent = getIntent();
- String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
-
- // Create the text view
- TextView textView = new TextView(this);
- textView.setTextSize(20);
- textView.setText(message);
- textView.setTextIsSelectable(true);
- textView.setPadding(10, 10, 10, 10);
-
-
- // Set the text view as the activity layout
- setContentView(textView);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu items for use in the action bar
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.display_message_activity_actions, menu);
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle presses on the action bar items
- switch (item.getItemId()) {
- case R.id.action_share:
- share();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-
-
-
- /**
- * A placeholder fragment containing a simple view.
- */
- public static class PlaceholderFragment extends Fragment {
-
- public PlaceholderFragment() {
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View rootView = inflater.inflate(R.layout.fragment_display_message,
- container, false);
- return rootView;
- }
- }
-
-
- public void share(){
- Intent intent = getIntent();
- String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
- Intent sendIntent = new Intent();
- sendIntent.setAction(Intent.ACTION_SEND);
- sendIntent.putExtra(Intent.EXTRA_TEXT, message);
- sendIntent.setType("text/plain");
- startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));
- }
-
-}
diff --git a/app/src/main/java/de/marcelkapfer/morseconverter/EncodeNormalMorseManager.java b/app/src/main/java/de/marcelkapfer/morseconverter/EncodeNormalMorseManager.java
new file mode 100644
index 0000000..9de31c3
--- /dev/null
+++ b/app/src/main/java/de/marcelkapfer/morseconverter/EncodeNormalMorseManager.java
@@ -0,0 +1,207 @@
+package de.marcelkapfer.morseconverter;
+
+/*
+ This is a Android application for converting writtenMorse and normal morse code.
+ Copyright (C) 2014-2015 Marcel Michael Kapfer
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+ Marcel Michael Kapfer
+ marcelmichaelkapfer@yahoo.co.nz
+
+ */
+
+/*
+ * Code for converting morse code into latin letters
+ */
+public class EncodeNormalMorseManager {
+
+ private String inputMessage;
+
+ EncodeNormalMorseManager(String string) {
+ inputMessage = string;
+ }
+
+ public void setString(String string){
+ inputMessage = string;
+ }
+
+ public String getString(){
+ return inputMessage;
+ }
+
+
+ public String getEncodedString() {
+ // Converts the input string into a StringBuffer
+ StringBuffer message = new StringBuffer(inputMessage);
+ // Delete the space at the end which is automatically set through some keyboards
+ if (message.toString().endsWith(" ")) {
+ message = message.deleteCharAt(message.length() - 1);
+ }
+ // Declaring variables
+ String input;
+ StringBuffer output = new StringBuffer();
+ input = message.toString() + " ";
+ StringBuffer inputToSign = new StringBuffer(input);
+ while (!inputToSign.toString().equals(" ")) {
+ int d = 0;
+ boolean signFull = true;
+ StringBuffer sign = new StringBuffer();
+ while (signFull) {
+ if (inputToSign.toString().startsWith(" ")) {
+ output.append(" ");
+ inputToSign.delete(d, d + 7);
+ } else if (inputToSign.toString().substring(d, d + 3).equals(" ")) {
+ if (d == 0) {
+ inputToSign.delete(0, 3);
+ } else {
+ sign.replace(0, sign.length(), inputToSign
+ .toString().substring(0, d));
+ inputToSign.delete(0, d);
+ signFull = false;
+ }
+ } else {
+ d++;
+ }
+ }
+ if (sign.toString().equals(".-")) {
+ output.append("A");
+ } else if (sign.toString().equals("-...")) {
+ output.append("B");
+ } else if (sign.toString().equals("-.-.")) {
+ output.append("C");
+ } else if (sign.toString().equals("-..")) {
+ output.append("D");
+ } else if (sign.toString().equals(".")) {
+ output.append("E");
+ } else if (sign.toString().equals("..-.")) {
+ output.append("F");
+ } else if (sign.toString().equals("--.")) {
+ output.append("G");
+ } else if (sign.toString().equals("....")) {
+ output.append("H");
+ } else if (sign.toString().equals("..")) {
+ output.append("I");
+ } else if (sign.toString().equals(".---")) {
+ output.append("J");
+ } else if (sign.toString().equals("-.-")) {
+ output.append("K");
+ } else if (sign.toString().equals(".-..")) {
+ output.append("L");
+ } else if (sign.toString().equals("--")) {
+ output.append("M");
+ } else if (sign.toString().equals("-.")) {
+ output.append("N");
+ } else if (sign.toString().equals("---")) {
+ output.append("O");
+ } else if (sign.toString().equals(".--.")) {
+ output.append("P");
+ } else if (sign.toString().equals("--.-")) {
+ output.append("Q");
+ } else if (sign.toString().equals(".-.")) {
+ output.append("R");
+ } else if (sign.toString().equals("...")) {
+ output.append("S");
+ } else if (sign.toString().equals("-")) {
+ output.append("T");
+ } else if (sign.toString().equals("..-")) {
+ output.append("U");
+ } else if (sign.toString().equals("...-")) {
+ output.append("V");
+ } else if (sign.toString().equals(".--")) {
+ output.append("W");
+ } else if (sign.toString().equals("-..-")) {
+ output.append("X");
+ } else if (sign.toString().equals("-.--")) {
+ output.append("Y");
+ } else if (sign.toString().equals("--..")) {
+ output.append("Z");
+ } else if (sign.toString().equals("-----")) {
+ output.append(". (zero)");
+ } else if (sign.toString().equals(".----")) {
+ output.append("-");
+ } else if (sign.toString().equals("..---")) {
+ output.append("2");
+ } else if (sign.toString().equals("...--")) {
+ output.append("3");
+ } else if (sign.toString().equals("....-")) {
+ output.append("4");
+ } else if (sign.toString().equals(".....")) {
+ output.append("5");
+ } else if (sign.toString().equals("-....")) {
+ output.append("6");
+ } else if (sign.toString().equals("--...")) {
+ output.append("7");
+ } else if (sign.toString().equals("---..")) {
+ output.append("8");
+ } else if (sign.toString().equals("----.")) {
+ output.append("9");
+ } else if (sign.toString().equals(".-.-")) {
+ output.append("Ä");
+ } else if (sign.toString().equals("---.")) {
+ output.append("Ö");
+ } else if (sign.toString().equals("..--")) {
+ output.append("Ü");
+ } else if (sign.toString().equals("...--...")) {
+ output.append("ß");
+ } else if (sign.toString().equals("----")) {
+ output.append("CH");
+ } else if (sign.toString().equals(".-.-.-")) {
+ output.append(".");
+ } else if (sign.toString().equals("--..--")) {
+ output.append(",");
+ } else if (sign.toString().equals("---...")) {
+ output.append(":");
+ } else if (sign.toString().equals("-.-.-.")) {
+ output.append(";");
+ } else if (sign.toString().equals("..--..")) {
+ output.append("?");
+ } else if (sign.toString().equals("-.-.--")) {
+ output.append("!");
+ } else if (sign.toString().equals("-....-")) {
+ output.append("-");
+ } else if (sign.toString().equals("..--.-")) {
+ output.append("_");
+ } else if (sign.toString().equals("-.--.")) {
+ output.append("(");
+ } else if (sign.toString().equals("-.--.-")) {
+ output.append(")");
+ } else if (sign.toString().equals(".----.")) {
+ output.append("'");
+ } else if (sign.toString().equals("-...-")) {
+ output.append("=");
+ } else if (sign.toString().equals(".-.-.")) {
+ output.append("+ or End of the signal");
+ } else if (sign.toString().equals("-..-.")) {
+ output.append("/");
+ } else if (sign.toString().equals(".--.-.")) {
+ output.append("@");
+ } else if (sign.toString().equals("-.-.-")) {
+ output.append("Begin of the signal");
+ } else if (sign.toString().equals("-...-")) {
+ output.append("Wait");
+ } else if (sign.toString().equals("...-.")) {
+ output.append("Understood");
+ } else if (sign.toString().equals("...-.-")) {
+ output.append("End of work");
+ } else if (sign.toString().equals("...---...")) {
+ output.append("SOS");
+ } else if (sign.toString().equals("........")) {
+ output.append("Error");
+ } else {
+ output.replace(0, output.length(), "Code not listed or wrong.");
+ }
+ }
+ return output.toString();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/marcelkapfer/morseconverter/EncodeWrittenMorseManager.java b/app/src/main/java/de/marcelkapfer/morseconverter/EncodeWrittenMorseManager.java
new file mode 100644
index 0000000..de027a8
--- /dev/null
+++ b/app/src/main/java/de/marcelkapfer/morseconverter/EncodeWrittenMorseManager.java
@@ -0,0 +1,207 @@
+package de.marcelkapfer.morseconverter;
+
+/*
+ This is a Android application for converting writtenMorse and normal morse code.
+ Copyright (C) 2014-2015 Marcel Michael Kapfer
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+ Marcel Michael Kapfer
+ marcelmichaelkapfer@yahoo.co.nz
+
+ */
+
+ /*
+ * Code for converting writtenMorse to latin letters
+ */
+
+public class EncodeWrittenMorseManager {
+
+ private String inputMessage;
+
+ EncodeWrittenMorseManager(String string){
+ inputMessage = string;
+ }
+
+ public String getString(){
+ return inputMessage;
+ }
+
+ public void setString(String string){
+ inputMessage = string;
+ }
+
+ public String getEncodedString() {
+ StringBuffer message = new StringBuffer(inputMessage);
+ if (message.toString().endsWith(" ")) {
+ message = message.deleteCharAt(message.length() - 1);
+ }
+ // Variables
+ String input;
+ StringBuffer output = new StringBuffer();
+ input = message.toString().toUpperCase() + "#";
+ StringBuffer inputToSign = new StringBuffer(input);
+ while (!inputToSign.toString().equals("#")) {
+ int d = 0;
+ boolean signFull = true;
+ StringBuffer sign = new StringBuffer();
+ while (signFull) {
+ if (inputToSign.toString().charAt(d) == '+'
+ || inputToSign.toString().charAt(d) == '#') {
+ if (d == 0) {
+ if (inputToSign.toString().startsWith("+")) {
+ output.append(" ");
+ }
+ inputToSign.deleteCharAt(0);
+ } else {
+ sign.replace(0, sign.length(), inputToSign
+ .toString().substring(0, d));
+ inputToSign.delete(0, d);
+ signFull = false;
+ }
+ } else {
+ d++;
+ }
+ }
+ if (sign.toString().equals("01")) {
+ output.append("A");
+ } else if (sign.toString().equals("1000")) {
+ output.append("B");
+ } else if (sign.toString().equals("1010")) {
+ output.append("C");
+ } else if (sign.toString().equals("100")) {
+ output.append("D");
+ } else if (sign.toString().equals("0")) {
+ output.append("E");
+ } else if (sign.toString().equals("0010")) {
+ output.append("F");
+ } else if (sign.toString().equals("110")) {
+ output.append("G");
+ } else if (sign.toString().equals("0000")) {
+ output.append("H");
+ } else if (sign.toString().equals("00")) {
+ output.append("I");
+ } else if (sign.toString().equals("0111")) {
+ output.append("J");
+ } else if (sign.toString().equals("101")) {
+ output.append("K");
+ } else if (sign.toString().equals("0100")) {
+ output.append("L");
+ } else if (sign.toString().equals("11")) {
+ output.append("M");
+ } else if (sign.toString().equals("10")) {
+ output.append("N");
+ } else if (sign.toString().equals("111")) {
+ output.append("O");
+ } else if (sign.toString().equals("0110")) {
+ output.append("P");
+ } else if (sign.toString().equals("1101")) {
+ output.append("Q");
+ } else if (sign.toString().equals("010")) {
+ output.append("R");
+ } else if (sign.toString().equals("000")) {
+ output.append("S");
+ } else if (sign.toString().equals("1")) {
+ output.append("T");
+ } else if (sign.toString().equals("001")) {
+ output.append("U");
+ } else if (sign.toString().equals("0001")) {
+ output.append("V");
+ } else if (sign.toString().equals("011")) {
+ output.append("W");
+ } else if (sign.toString().equals("1001")) {
+ output.append("X");
+ } else if (sign.toString().equals("1011")) {
+ output.append("Y");
+ } else if (sign.toString().equals("1100")) {
+ output.append("Z");
+ } else if (sign.toString().equals("11111")) {
+ output.append("0 (zero)");
+ } else if (sign.toString().equals("01111")) {
+ output.append("1");
+ } else if (sign.toString().equals("00111")) {
+ output.append("2");
+ } else if (sign.toString().equals("00011")) {
+ output.append("3");
+ } else if (sign.toString().equals("00001")) {
+ output.append("4");
+ } else if (sign.toString().equals("00000")) {
+ output.append("5");
+ } else if (sign.toString().equals("10000")) {
+ output.append("6");
+ } else if (sign.toString().equals("11000")) {
+ output.append("7");
+ } else if (sign.toString().equals("11100")) {
+ output.append("8");
+ } else if (sign.toString().equals("11110")) {
+ output.append("9");
+ } else if (sign.toString().equals("0101")) {
+ output.append("Ä");
+ } else if (sign.toString().equals("1110")) {
+ output.append("Ö");
+ } else if (sign.toString().equals("0011")) {
+ output.append("Ü");
+ } else if (sign.toString().equals("00011000")) {
+ output.append("ß");
+ } else if (sign.toString().equals("1111")) {
+ output.append("CH");
+ } else if (sign.toString().equals("010101")) {
+ output.append(".");
+ } else if (sign.toString().equals("110011")) {
+ output.append(",");
+ } else if (sign.toString().equals("111000")) {
+ output.append(":");
+ } else if (sign.toString().equals("101010")) {
+ output.append(";");
+ } else if (sign.toString().equals("001100")) {
+ output.append("?");
+ } else if (sign.toString().equals("101011")) {
+ output.append("!");
+ } else if (sign.toString().equals("100001")) {
+ output.append("-");
+ } else if (sign.toString().equals("001101")) {
+ output.append("_");
+ } else if (sign.toString().equals("10110")) {
+ output.append("(");
+ } else if (sign.toString().equals("101101")) {
+ output.append(")");
+ } else if (sign.toString().equals("011110")) {
+ output.append("'");
+ } else if (sign.toString().equals("10001")) {
+ output.append("=");
+ } else if (sign.toString().equals("01010")) {
+ output.append("+ or End of the signal");
+ } else if (sign.toString().equals("10010")) {
+ output.append("/");
+ } else if (sign.toString().equals("011010")) {
+ output.append("@");
+ } else if (sign.toString().equals("10101")) {
+ output.append("Begin of the signal");
+ } else if (sign.toString().equals("10001")) {
+ output.append("Wait");
+ } else if (sign.toString().equals("00010")) {
+ output.append("Understood");
+ } else if (sign.toString().equals("000101")) {
+ output.append("End of work");
+ } else if (sign.toString().equals("000111000")) {
+ output.append("SOS");
+ } else if (sign.toString().equals("00000000")) {
+ output.append("Error");
+ } else {
+ output.replace(0, output.length(), "Code not listed or wrong.");
+ }
+ }
+ return output.toString();
+ }
+
+}
diff --git a/app/src/main/java/de/marcelkapfer/morseconverter/MainActivity.java b/app/src/main/java/de/marcelkapfer/morseconverter/MainActivity.java
index 83a99e2..3b088f0 100644
--- a/app/src/main/java/de/marcelkapfer/morseconverter/MainActivity.java
+++ b/app/src/main/java/de/marcelkapfer/morseconverter/MainActivity.java
@@ -1,1025 +1,247 @@
-/*
- * This is a Android application for converting writtenMorse and normal morse code.
- * Copyright (C) 2014-2015 Marcel Michael Kapfer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- * Marcel Michael Kapfer
- * marcelmichaelkapfer@yahoo.co.nz
- *
- * Version 1.0.1
- */
-
package de.marcelkapfer.morseconverter;
-import android.app.Fragment;
-import android.app.FragmentManager;
+/*
+ This is a Android application for converting writtenMorse and normal morse code.
+ Copyright (C) 2014-2015 Marcel Michael Kapfer
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+ Marcel Michael Kapfer
+ marcelmichaelkapfer@yahoo.co.nz
+
+ */
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
import android.content.Intent;
-import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.net.Uri;
import android.os.Bundle;
-import android.support.v4.app.ActionBarDrawerToggle;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.widget.DrawerLayout;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
+import android.support.v7.widget.CardView;
import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
import android.widget.EditText;
-import android.widget.ListView;
+import android.widget.TextView;
-public class MainActivity extends FragmentActivity {
- private DrawerLayout mDrawerLayout;
- private ListView mDrawerList;
- private ActionBarDrawerToggle mDrawerToggle;
+import it.neokree.materialnavigationdrawer.MaterialNavigationDrawer;
+import it.neokree.materialnavigationdrawer.elements.MaterialSection;
- private CharSequence mDrawerTitle;
- private CharSequence mTitle;
- private String[] mMenuTitles;
- public String[] fragments = new String[] {"R.id.main", "R.id.morse", "R.id.about"};
- private static int[] fragment = new int[] {R.layout.fragment_main, R.layout.fragment_morse, R.layout.fragment_about };
- public static int mainPosition;
- public final static String EXTRA_MESSAGE = "de.marcelkapfer.morseconverter.MESSAGE";
- public String tfOutput = "";
- public static int lastFragment = 0;
+public class MainActivity extends MaterialNavigationDrawer {
+ //Declaring the Material Sections
+ private MaterialSection writtenMorse, normalMorse, about;
+
+ //The MaterialNavigationDrawer init() methode replaces the normal onCreate() methode
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
+ public void init(Bundle savedInstanceState) {
+ Resources res = getResources();
+ //Declaring the Material Sections
+ writtenMorse = this.newSection("writtenMorse", new MainFragment());
+ normalMorse = this.newSection(res.getString(R.string.normalMorse), new MorseFragment());
+ about = this.newSection(res.getString(R.string.about), new AboutFragment());
+ //Adding the Sections
+ this.addSection(writtenMorse);
+ this.addSection(normalMorse);
+ this.addDivisor();
+ this.addSection(about);
+ //set drawer image
+ this.setDrawerHeaderImage(this.getResources().getDrawable(R.drawable.feature_graphics));
+ allowArrowAnimation(); //Drawer Arrow rotations
+ this.disableLearningPattern(); //Doesn't open the drawer always when the app starts
+ }
- mTitle = mDrawerTitle = getTitle();
- mMenuTitles = getResources().getStringArray(R.array.menu_array);
- mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
- mDrawerList = (ListView) findViewById(R.id.left_drawer);
-
- // set a custom shadow that overlays the main content when the drawer opens
- mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
- // set up the drawer's list view with items and click listener
- mDrawerList.setAdapter(new ArrayAdapter(this,
- R.layout.drawer_list_item, mMenuTitles));
- mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
-
- // enable ActionBar app icon to behave as action to toggle nav drawer
- getActionBar().setDisplayHomeAsUpEnabled(true);
- getActionBar().setHomeButtonEnabled(true);
-
- // ActionBarDrawerToggle ties together the the proper interactions
- // between the sliding drawer and the action bar app icon
- mDrawerToggle = new ActionBarDrawerToggle(
- this, /* host Activity */
- mDrawerLayout, /* DrawerLayout object */
- R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
- R.string.drawer_open, /* "open drawer" description for accessibility */
- R.string.drawer_close /* "close drawer" description for accessibility */
- ) {
-
- /** Called when a drawer has settled in a completely closed state. */
- public void onDrawerClosed(View view) {
- super.onDrawerClosed(view);
- getActionBar().setTitle(mTitle);
+ public void normalMorseEncode(View view){
+ try{
+ EditText input = (EditText) findViewById(R.id.editTextNormalMorse);
+ TextView output = (TextView) findViewById(R.id.outputNormalMorse);
+ CardView cardView = (CardView) findViewById(R.id.cardViewNormalMorseOutput);
+ if(cardView.getVisibility() == View.INVISIBLE){
+ cardView.setVisibility(View.VISIBLE);
}
+ EncodeNormalMorseManager message = new EncodeNormalMorseManager(input.getText().toString());
+ output.setText(message.getEncodedString());
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ }
- /** Called when a drawer has settled in a completely open state. */
- public void onDrawerOpened(View drawerView) {
- super.onDrawerOpened(drawerView);
- getActionBar().setTitle(mDrawerTitle);
+ public void normalMorseDecode(View view){
+ try {
+ EditText input = (EditText) findViewById(R.id.editTextNormalMorse);
+ TextView output = (TextView) findViewById(R.id.outputNormalMorse);
+ CardView cardView = (CardView) findViewById(R.id.cardViewNormalMorseOutput);
+ if(cardView.getVisibility() == View.INVISIBLE){
+ cardView.setVisibility(View.VISIBLE);
}
-
- };
- mDrawerLayout.setDrawerListener(mDrawerToggle);
-
-
- if(savedInstanceState == null) {
- changeFragment(lastFragment);
- }
- }
-
-
- /* The click listner for ListView in the navigation drawer */
- private class DrawerItemClickListener implements ListView.OnItemClickListener {
- @Override
- public void onItemClick(AdapterView> parent, View view, int position, long id) {
-
- changeFragment(position);
- mainPosition = position;
- }
-
- }
-
-
- public void changeFragment(int position){
-
-
- fragment_main newFragment = new fragment_main();
- Bundle args = new Bundle();
- args.putInt(fragments[position], position);
- newFragment.setArguments(args);
-
- // Insert the fragment by replacing any existing fragment
- FragmentManager fragmentManager = getFragmentManager();
- fragmentManager.beginTransaction()
- .replace(R.id.container, newFragment).commit();
-
- mDrawerList.setItemChecked(position, true);
- setTitle(mMenuTitles[position]);
- mDrawerLayout.closeDrawer(mDrawerList);
-
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Pass the event to ActionBarDrawerToggle, if it returns
- // true, then it has handled the app icon touch event
- if (mDrawerToggle.onOptionsItemSelected(item)) {
- return true;
- }
- // Handle your other action bar items...
-
- return super.onOptionsItemSelected(item);
- }
-
-
- @Override
- public void setTitle(CharSequence title) {
- mTitle = title;
- getActionBar().setTitle(mTitle);
- }
-
- /**
- * When using the ActionBarDrawerToggle, you must call it during
- * onPostCreate() and onConfigurationChanged()...
- */
-
- @Override
- protected void onPostCreate(Bundle savedInstanceState) {
- super.onPostCreate(savedInstanceState);
- // Sync the toggle state after onRestoreInstanceState has occurred.
- mDrawerToggle.syncState();
- }
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- mDrawerToggle.onConfigurationChanged(newConfig);
- }
-
-
-
-
- public static class fragment_main extends Fragment {
- public static final String ARG_POSITION = "menu_number";
-
-
- public fragment_main() {
- // Empty subclass required for fragment subclass
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View rootView = inflater.inflate(fragment[MainActivity.mainPosition], container, false);
- //int i = getArguments().getInt(ARG_POSITION);
- //String menu = getResources().getStringArray(R.array.menu_array)[i];
- //getActivity().setTitle(menu);
- return rootView;
+ DecodeNormalMorseManager message = new DecodeNormalMorseManager(input.getText().toString());
+ output.setText(message.getDecodedString());
+ } catch (Exception e){
+ e.printStackTrace();
}
}
-
- /*
- * Code for converting latin letters into written morse
- */
- public void decode(View view) {
- EditText editText = (EditText) findViewById(R.id.edit_message);
- StringBuffer message = new StringBuffer(editText.getText());
- if (message.toString().endsWith(" ")){
- message = message.deleteCharAt(message.length() - 1);
- }
- // Variables
- StringBuffer input = new StringBuffer();
- input = input.replace(0, input.length(), message.toString().toUpperCase());
- StringBuffer output = new StringBuffer();
- if (input.toString().equals("")) {
- tfOutput = "Please enter at least one character";
- After(view);
- } else if (input.toString().equals("LETTERSPACE")) {
- tfOutput = "#";
- After(view);
- } else if (input.toString().equals("END OF WORK")) {
- tfOutput = "000101";
- After(view);
- } else if (input.toString().equals("ERROR")) {
- tfOutput = "00000000";
- After(view);
- } else if (input.toString().equals("STARTING SIGNAL")) {
- tfOutput = "10101";
- After(view);
- } else if (input.toString().equals("ENDING SIGNAL")) {
- tfOutput = "01010";
- After(view);
- } else if (input.toString().equals("UNDERSTOOD")) {
- tfOutput = "00010";
- After(view);
- } else if (input.toString().equals("WAIT")) {
- tfOutput = "01000";
- After(view);
- } else if (input.toString().equals("SOS")) {
- tfOutput = "000111000";
- After(view);
- } else if (input.toString().equals("LETTER SPACE")) {
- tfOutput = "#";
- After(view);
- } else if (input.toString().equals("WORD SPACE")) {
- tfOutput = "+";
- After(view);
- } else {
- for (int c = input.length(); c > 0; c--) {
-
- if (input.toString().startsWith(" ")) {
- if(output.toString().endsWith("#")){
- output.delete(output.length() -1 , output.length());
- }
- output.append("+");
- input.delete(0, 1);
- } else if (input.toString().startsWith("A")) {
- output.append("01#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("B")) {
- output.append("1000#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("C")) {
- output.append("1010#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("D")) {
- output.append("100#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("E")) {
- output.append("0#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("F")) {
- output.append("0010#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("G")) {
- output.append("110#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("H")) {
- output.append("0000#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("I")) {
- output.append("00#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("J")) {
- output.append("0111#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("K")) {
- output.append("101#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("L")) {
- output.append("0100#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("M")) {
- output.append("11#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("N")) {
- output.append("10#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("O")) {
- output.append("111#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("P")) {
- output.append("0110#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Q")) {
- output.append("1101#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("R")) {
- output.append("010#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("S")) {
- output.append("000#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("T")) {
- output.append("1#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("U")) {
- output.append("001#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("V")) {
- output.append("0001#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("W")) {
- output.append("011#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("X")) {
- output.append("1001#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Y")) {
- output.append("1011#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Z")) {
- output.append("1100#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("0")) {
- output.append("11111#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("1")) {
- output.append("01111#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("2")) {
- output.append("00111#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("3")) {
- output.append("00011#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("4")) {
- output.append("00001#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("5")) {
- output.append("00000#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("6")) {
- output.append("10000#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("7")) {
- output.append("11000#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("8")) {
- output.append("11100#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("9")) {
- output.append("11110#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Ä")) {
- output.append("0101#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Ö")) {
- output.append("1110#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Ü")) {
- output.append("0011#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("ß")) {
- output.append("00011000#");
- input.delete(0, 1);
- } else if (input.toString().startsWith(".")) {
- output.append("010101#");
- input.delete(0, 1);
- } else if (input.toString().startsWith(",")) {
- output.append("110011#");
- input.delete(0, 1);
- } else if (input.toString().startsWith(":")) {
- output.append("111000#");
- input.delete(0, 1);
- } else if (input.toString().startsWith(";")) {
- output.append("101010#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("?")) {
- output.append("001100#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("!")) {
- output.append("101011#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("-")) {
- output.append("100001#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("_")) {
- output.append("001101#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("(")) {
- output.append("10110#");
- input.delete(0, 1);
- } else if (input.toString().startsWith(")")) {
- output.append("101101#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("=")) {
- output.append("10001#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("+")) {
- output.append("01010#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("/")) {
- output.append("10010#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("@")) {
- output.append("011010#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("'")) {
- output.append("011110#");
- input.delete(0, 1);
- } else if (input.toString().startsWith("$")) {
- output.append("0001001#");
- input.delete(0, 1);
- } else {
- tfOutput = "Code not listed or wrong.";
- }
- }
- if(output.toString().endsWith("#")){
- output.delete(output.length() -1 , output.length());
- }
- tfOutput = output.toString();
- lastFragment = 0;
- After(view);
- }
- }
-
- /*
- * Code for converting writtenMorse to latin letters
- */
- public void encode (View view) {
- EditText editText = (EditText) findViewById(R.id.edit_message);
- StringBuffer message = new StringBuffer(editText.getText());
- if (message.toString().endsWith(" ")){
- message = message.deleteCharAt(message.length() - 1);
- }
- // Variables
- String input;
- StringBuffer output = new StringBuffer();
- input = message.toString().toUpperCase() + "#";
- StringBuffer inputToSign = new StringBuffer(input);
- while (!inputToSign.toString().equals("#")) {
- int d = 0;
- boolean signFull = true;
- StringBuffer sign = new StringBuffer();
- while (signFull) {
- if (inputToSign.toString().charAt(d) == '+'
- || inputToSign.toString().charAt(d) == '#') {
- if (d == 0) {
- if (inputToSign.toString().startsWith("+")) {
- output.append(" ");
- }
- inputToSign.deleteCharAt(0);
- } else {
- sign.replace(0, sign.length(), inputToSign
- .toString().substring(0, d));
- inputToSign.delete(0, d);
- signFull = false;
- }
- } else {
- d++;
- }
- }
- if (input.equals("°")) {
- break;
- } else if (sign.toString().equals("01")) {
- output.append("A");
- } else if (sign.toString().equals("1000")) {
- output.append("B");
- } else if (sign.toString().equals("1010")) {
- output.append("C");
- } else if (sign.toString().equals("100")) {
- output.append("D");
- } else if (sign.toString().equals("0")) {
- output.append("E");
- } else if (sign.toString().equals("0010")) {
- output.append("F");
- } else if (sign.toString().equals("110")) {
- output.append("G");
- } else if (sign.toString().equals("0000")) {
- output.append("H");
- } else if (sign.toString().equals("00")) {
- output.append("I");
- } else if (sign.toString().equals("0111")) {
- output.append("J");
- } else if (sign.toString().equals("101")) {
- output.append("K");
- } else if (sign.toString().equals("0100")) {
- output.append("L");
- } else if (sign.toString().equals("11")) {
- output.append("M");
- } else if (sign.toString().equals("10")) {
- output.append("N");
- } else if (sign.toString().equals("111")) {
- output.append("O");
- } else if (sign.toString().equals("0110")) {
- output.append("P");
- } else if (sign.toString().equals("1101")) {
- output.append("Q");
- } else if (sign.toString().equals("010")) {
- output.append("R");
- } else if (sign.toString().equals("000")) {
- output.append("S");
- } else if (sign.toString().equals("1")) {
- output.append("T");
- } else if (sign.toString().equals("001")) {
- output.append("U");
- } else if (sign.toString().equals("0001")) {
- output.append("V");
- } else if (sign.toString().equals("011")) {
- output.append("W");
- } else if (sign.toString().equals("1001")) {
- output.append("X");
- } else if (sign.toString().equals("1011")) {
- output.append("Y");
- } else if (sign.toString().equals("1100")) {
- output.append("Z");
- } else if (sign.toString().equals("11111")) {
- output.append("0 (zero)");
- } else if (sign.toString().equals("01111")) {
- output.append("1");
- } else if (sign.toString().equals("00111")) {
- output.append("2");
- } else if (sign.toString().equals("00011")) {
- output.append("3");
- } else if (sign.toString().equals("00001")) {
- output.append("4");
- } else if (sign.toString().equals("00000")) {
- output.append("5");
- } else if (sign.toString().equals("10000")) {
- output.append("6");
- } else if (sign.toString().equals("11000")) {
- output.append("7");
- } else if (sign.toString().equals("11100")) {
- output.append("8");
- } else if (sign.toString().equals("11110")) {
- output.append("9");
- } else if (sign.toString().equals("0101")) {
- output.append("Ä");
- } else if (sign.toString().equals("1110")) {
- output.append("Ö");
- } else if (sign.toString().equals("0011")) {
- output.append("Ü");
- } else if (sign.toString().equals("00011000")) {
- output.append("ß");
- } else if (sign.toString().equals("1111")) {
- output.append("CH");
- } else if (sign.toString().equals("010101")) {
- output.append(".");
- } else if (sign.toString().equals("110011")) {
- output.append(",");
- } else if (sign.toString().equals("111000")) {
- output.append(":");
- } else if (sign.toString().equals("101010")) {
- output.append(";");
- } else if (sign.toString().equals("001100")) {
- output.append("?");
- } else if (sign.toString().equals("101011")) {
- output.append("!");
- } else if (sign.toString().equals("100001")) {
- output.append("-");
- } else if (sign.toString().equals("001101")) {
- output.append("_");
- } else if (sign.toString().equals("10110")) {
- output.append("(");
- } else if (sign.toString().equals("101101")) {
- output.append(")");
- } else if (sign.toString().equals("011110")) {
- output.append("'");
- } else if (sign.toString().equals("10001")) {
- output.append("=");
- } else if (sign.toString().equals("01010")) {
- output.append("+ or End of the signal");
- } else if (sign.toString().equals("10010")) {
- output.append("/");
- } else if (sign.toString().equals("011010")) {
- output.append("@");
- } else if (sign.toString().equals("10101")) {
- output.append("Begin of the signal");
- } else if (sign.toString().equals("10001")) {
- output.append("Wait");
- } else if (sign.toString().equals("00010")) {
- output.append("Understood");
- } else if (sign.toString().equals("000101")) {
- output.append("End of work");
- } else if (sign.toString().equals("000111000")) {
- output.append("SOS");
- } else if (sign.toString().equals("00000000")) {
- output.append("Error");
- } else {
- tfOutput = "Code not listed or wrong.";
- }
- }
- tfOutput = output.toString();
- lastFragment = 0;
- After(view);
- /*} catch (Exception e) {
- tfOutput.setText("Some error occured. I'm sorry!");
- }*/
- }
-
- /*
- * Code for converting normal letters into morse code
- */
-
- public void llm(View view) {
- EditText editText = (EditText) findViewById(R.id.edit_message);
- StringBuffer message = new StringBuffer(editText.getText());
- if (message.toString().endsWith(" ")){
- message = message.deleteCharAt(message.length() - 1);
- }
- // Variables
- // Variables
- StringBuffer input = new StringBuffer();
- input = input.replace(0, input.length(), message.toString().toUpperCase());
- StringBuffer output = new StringBuffer();
- if (input.toString().equals("")) {
- tfOutput = "Please enter at least one character";
- After(view);
- } else if (input.toString().equals("LETTERSPACE")) {
- tfOutput = " ";
- After(view);
- } else if (input.toString().equals("END OF WORK")) {
- tfOutput = "...-.-";
- After(view);
- } else if (input.toString().equals("ERROR")) {
- tfOutput = "........";
- After(view);
- } else if (input.toString().equals("STARTING SIGNAL")) {
- tfOutput = "-.-.-";
- After(view);
- } else if (input.toString().equals("ENDING SIGNAL")) {
- tfOutput = ".-.-.";
- After(view);
- } else if (input.toString().equals("UNDERSTOOD")) {
- tfOutput = "...-.";
- After(view);
- } else if (input.toString().equals("WAIT")) {
- tfOutput = ".-...";
- After(view);
- } else if (input.toString().equals("SOS")) {
- tfOutput = "...---...";
- After(view);
- } else if (input.toString().equals("LETTER SPACE")) {
- tfOutput = " ";
- After(view);
- } else if (input.toString().equals("WORD SPACE")) {
- tfOutput = " ";
- After(view);
- } else {
- for (int c = input.length(); c > 0; c--) {
- if (input.toString().startsWith(" ")) {
- if(output.toString().endsWith(" ")){
- output.delete(output.length() - 3 , output.length());
- }
- output.append(" ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("A")) {
- output.append(".- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("B")) {
- output.append("-... ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("C")) {
- output.append("-.-. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("D")) {
- output.append("-.. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("E")) {
- output.append(". ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("F")) {
- output.append("..-. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("G")) {
- output.append("--. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("H")) {
- output.append(".... ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("I")) {
- output.append(".. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("J")) {
- output.append(".--- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("K")) {
- output.append("-.- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("L")) {
- output.append(".-.. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("M")) {
- output.append("-- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("N")) {
- output.append("-. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("O")) {
- output.append("--- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("P")) {
- output.append(".--. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Q")) {
- output.append("--.- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("R")) {
- output.append(".-. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("S")) {
- output.append("... ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("T")) {
- output.append("- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("U")) {
- output.append("..- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("V")) {
- output.append("...- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("W")) {
- output.append(".-- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("X")) {
- output.append("-..- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Y")) {
- output.append("-.-- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Z")) {
- output.append("--.. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("0")) {
- output.append("----- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("1")) {
- output.append(".---- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("2")) {
- output.append("..--- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("3")) {
- output.append("...-- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("4")) {
- output.append("....- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("5")) {
- output.append("..... ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("6")) {
- output.append("-.... ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("7")) {
- output.append("--... ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("8")) {
- output.append("---.. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("9")) {
- output.append("----. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Ä")) {
- output.append(".-.- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Ö")) {
- output.append("---. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("Ü")) {
- output.append("..-- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("ß")) {
- output.append("...--... ");
- input.delete(0, 1);
- } else if (input.toString().startsWith(".")) {
- output.append(".-.-.- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith(",")) {
- output.append("--..-- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith(":")) {
- output.append("---... ");
- input.delete(0, 1);
- } else if (input.toString().startsWith(";")) {
- output.append("-.-.-. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("?")) {
- output.append("..--.. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("!")) {
- output.append("-.-.-- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("-")) {
- output.append("-....- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("_")) {
- output.append("..--.- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("(")) {
- output.append("-.--. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith(")")) {
- output.append("-.--.- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("=")) {
- output.append("-...- ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("+")) {
- output.append(".-.-. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("/")) {
- output.append("-..-. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("@")) {
- output.append(".--.-. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("'")) {
- output.append(".----. ");
- input.delete(0, 1);
- } else if (input.toString().startsWith("$")) {
- output.append("...-..- ");
- input.delete(0, 1);
- } else {
- tfOutput = "Code not listed or wrong.";
- }
- }
- if(output.toString().endsWith(" ")){
- output.delete(output.length() - 3 , output.length());
- }
- tfOutput = output.toString();
- lastFragment = 1;
- After(view);
- }
- }
-
- /*
- * Code for converting morse code into latin letters
- */
- public void mll(View view) {
- EditText editText = (EditText) findViewById(R.id.edit_message);
- StringBuffer message = new StringBuffer(editText.getText());
- if (message.toString().endsWith(" ")){
- message = message.deleteCharAt(message.length() - 1);
- }
- String input;
- StringBuffer output = new StringBuffer();
- input = message.toString().toUpperCase() + "#";
- StringBuffer inputToSign = new StringBuffer(input);
- while (!message.toString().equals(" ")) {
- int d = 0;
- boolean signFull = true;
- StringBuffer sign = new StringBuffer();
- while (signFull) {
- if (inputToSign.toString().startsWith(" ")) {
- output.append(" ");
- inputToSign.delete(d, d + 9);
- } else if (inputToSign.toString().substring(d, d + 3)
- .equals(" ")) {
- if (d == 0) {
- inputToSign.delete(0, 3);
- } else {
- sign.replace(0, sign.length(), inputToSign
- .toString().substring(0, d));
- inputToSign.delete(0, d);
- signFull = false;
- }
- } else {
- d++;
- }
+ public void writtenMorseEncode(View view){
+ try {
+ EditText input = (EditText) findViewById(R.id.editTextWrittenMorse);
+ TextView output = (TextView) findViewById(R.id.outputWrittenMorse);
+ CardView cardView = (CardView) findViewById(R.id.cardViewWrittenMorseOutput);
+ if(cardView.getVisibility() == View.INVISIBLE){
+ cardView.setVisibility(View.VISIBLE);
}
- if (sign.toString().equals(".-")) {
- output.append("A");
- } else if (sign.toString().equals("-...")) {
- output.append("B");
- } else if (sign.toString().equals("-.-.")) {
- output.append("C");
- } else if (sign.toString().equals("-..")) {
- output.append("D");
- } else if (sign.toString().equals(".")) {
- output.append("E");
- } else if (sign.toString().equals("..-.")) {
- output.append("F");
- } else if (sign.toString().equals("--.")) {
- output.append("G");
- } else if (sign.toString().equals("....")) {
- output.append("H");
- } else if (sign.toString().equals("..")) {
- output.append("I");
- } else if (sign.toString().equals(".---")) {
- output.append("J");
- } else if (sign.toString().equals("-.-")) {
- output.append("K");
- } else if (sign.toString().equals(".-..")) {
- output.append("L");
- } else if (sign.toString().equals("--")) {
- output.append("M");
- } else if (sign.toString().equals("-.")) {
- output.append("N");
- } else if (sign.toString().equals("---")) {
- output.append("O");
- } else if (sign.toString().equals(".--.")) {
- output.append("P");
- } else if (sign.toString().equals("--.-")) {
- output.append("Q");
- } else if (sign.toString().equals(".-.")) {
- output.append("R");
- } else if (sign.toString().equals("...")) {
- output.append("S");
- } else if (sign.toString().equals("-")) {
- output.append("T");
- } else if (sign.toString().equals("..-")) {
- output.append("U");
- } else if (sign.toString().equals("...-")) {
- output.append("V");
- } else if (sign.toString().equals(".--")) {
- output.append("W");
- } else if (sign.toString().equals("-..-")) {
- output.append("X");
- } else if (sign.toString().equals("-.--")) {
- output.append("Y");
- } else if (sign.toString().equals("--..")) {
- output.append("Z");
- } else if (sign.toString().equals("-----")) {
- output.append(". (zero)");
- } else if (sign.toString().equals(".----")) {
- output.append("-");
- } else if (sign.toString().equals("..---")) {
- output.append("2");
- } else if (sign.toString().equals("...--")) {
- output.append("3");
- } else if (sign.toString().equals("....-")) {
- output.append("4");
- } else if (sign.toString().equals(".....")) {
- output.append("5");
- } else if (sign.toString().equals("-....")) {
- output.append("6");
- } else if (sign.toString().equals("--...")) {
- output.append("7");
- } else if (sign.toString().equals("---..")) {
- output.append("8");
- } else if (sign.toString().equals("----.")) {
- output.append("9");
- } else if (sign.toString().equals(".-.-")) {
- output.append("Ä");
- } else if (sign.toString().equals("---.")) {
- output.append("Ö");
- } else if (sign.toString().equals("..--")) {
- output.append("Ü");
- } else if (sign.toString().equals("...--...")) {
- output.append("ß");
- } else if (sign.toString().equals("----")) {
- output.append("CH");
- } else if (sign.toString().equals(".-.-.-")) {
- output.append(".");
- } else if (sign.toString().equals("--..--")) {
- output.append(",");
- } else if (sign.toString().equals("---...")) {
- output.append(":");
- } else if (sign.toString().equals("-.-.-.")) {
- output.append(";");
- } else if (sign.toString().equals("..--..")) {
- output.append("?");
- } else if (sign.toString().equals("-.-.--")) {
- output.append("!");
- } else if (sign.toString().equals("-....-")) {
- output.append("-");
- } else if (sign.toString().equals("..--.-")) {
- output.append("_");
- } else if (sign.toString().equals("-.--.")) {
- output.append("(");
- } else if (sign.toString().equals("-.--.-")) {
- output.append(")");
- } else if (sign.toString().equals(".----.")) {
- output.append("'");
- } else if (sign.toString().equals("-...-")) {
- output.append("=");
- } else if (sign.toString().equals(".-.-.")) {
- output.append("+ or End of the signal");
- } else if (sign.toString().equals("-..-.")) {
- output.append("/");
- } else if (sign.toString().equals(".--.-.")) {
- output.append("@");
- } else if (sign.toString().equals("-.-.-")) {
- output.append("Begin of the signal");
- } else if (sign.toString().equals("-...-")) {
- output.append("Wait");
- } else if (sign.toString().equals("...-.")) {
- output.append("Understood");
- } else if (sign.toString().equals("...-.-")) {
- output.append("End of work");
- } else if (sign.toString().equals("...---...")) {
- output.append("SOS");
- } else if (sign.toString().equals("........")) {
- output.append("Error");
- } else {
- tfOutput = "Code not listed or wrong.";
- }
- }
- tfOutput = output.toString();
- lastFragment = 1;
- After(view);
- }
-
+ EncodeWrittenMorseManager message = new EncodeWrittenMorseManager(input.getText().toString());
+ output.setText(message.getEncodedString());
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ }
- public void After(View view){
- Intent intent = new Intent(this, DisplayMessageActivity.class);
- intent.putExtra(EXTRA_MESSAGE, tfOutput );
- startActivity(intent);
- tfOutput = "";
+ public void writtenMorseDecode(View view){
+ try {
+ EditText input = (EditText) findViewById(R.id.editTextWrittenMorse);
+ TextView output = (TextView) findViewById(R.id.outputWrittenMorse);
+ CardView cardView = (CardView) findViewById(R.id.cardViewWrittenMorseOutput);
+ if(cardView.getVisibility() == View.INVISIBLE){
+ cardView.setVisibility(View.VISIBLE);
+ }
+ DecodeWrittenMorseManager message = new DecodeWrittenMorseManager(input.getText().toString());
+ output.setText(message.getDecodedString());
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ //called when clicking on the version entry in the about fragment
+ //opens the app page (de.marcelkapfer.morseconverter)
+ public void versionEntry(View view){
+ try{
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=de.marcelkapfer.morseconverter"));
+ startActivity(browserIntent);
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ //called when clicking on the developer entry in the about fragment
+ //opens the gplus profile of +MarcelMichaelKapfer
+ public void developerEntry(View view){
+ try{
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://plus.google.com/+MarcelMichaelKapfer/posts"));
+ startActivity(browserIntent);
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ //called when clicking on the website entry in the about fragment
+ //opens marcel-kapfer.de/projects/morse/
+ public void websiteEntry(View view){
+ try{
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://marcel-kapfer.de/projects/morse/"));
+ startActivity(browserIntent);
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ //called when clicking on the contact entry in the about fragment
+ //opens mail app with mail to marcelmichaelkapfer@yahoo.co.nz
+ public void contactEntry(View view){
+ try{
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:marcelmichaelkapfer@yahoo.co.nz"));
+ startActivity(browserIntent);
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ //called when clicking on the license entry in the about fragment
+ //opens the license web page
+ public void licenseEntry(View view){
+ try{
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://gnu.org/copyleft/gpl.html"));
+ startActivity(browserIntent);
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ //called when clicking on the developer entry in the about fragment
+ //opens mail app with mail to marcelmichaelkapfer@yahoo.co.nz
+ public void bugEntry(View view){
+ try{
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:marcelmichaelkapfer@yahoo.co.nz?subject=Bug Report"));
+ startActivity(browserIntent);
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ //called when clicking on the developer entry in the about fragment
+ //opens the howto webpage
+ public void howtoEntry(View view){
+ try{
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://marcel-kapfer.de/projects/morse/index.html#howto_android"));
+ startActivity(browserIntent);
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ //called when clicking on the developer entry in the about fragment
+ //opens mail app with mail to marcelmichaelkapfer@yahoo.co.nz
+ public void missingCodeEntry(View view){
+ try{
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:marcelmichaelkapfer@yahoo.co.nz?subject=Missing Code"));
+ startActivity(browserIntent);
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ public void shareWrittenMorse(View view){
+ TextView message = (TextView) findViewById(R.id.outputWrittenMorse);
+ share(message.getText().toString());
+ }
+
+ public void shareNormalMorse(View view){
+ TextView message = (TextView) findViewById(R.id.outputNormalMorse);
+ share(message.getText().toString());
+ }
+
+ public void share(String string){
+ Intent intent = getIntent();
+ String message = intent.getStringExtra(string);
+ Intent sendIntent = new Intent();
+ sendIntent.setAction(Intent.ACTION_SEND);
+ sendIntent.putExtra(Intent.EXTRA_TEXT, message);
+ sendIntent.setType("text/plain");
+ startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));
}
+
+ public void copyWrittenMorse(View view){
+ TextView message = (TextView) findViewById(R.id.outputWrittenMorse);
+ copy(message.getText().toString());
+ }
+
+ public void copyNormalMorse(View view){
+ TextView message = (TextView) findViewById(R.id.outputNormalMorse);
+ copy(message.getText().toString());
+ }
+
+ public void copy(String string){
+ ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
+ ClipData clip = ClipData.newPlainText("Message", string);
+ clipboard.setPrimaryClip(clip);
+ }
}
diff --git a/app/src/main/res/layout/activity_display_message.xml b/app/src/main/java/de/marcelkapfer/morseconverter/MainFragment.java
similarity index 63%
rename from app/src/main/res/layout/activity_display_message.xml
rename to app/src/main/java/de/marcelkapfer/morseconverter/MainFragment.java
index 5bffc80..cec167a 100644
--- a/app/src/main/res/layout/activity_display_message.xml
+++ b/app/src/main/java/de/marcelkapfer/morseconverter/MainFragment.java
@@ -1,5 +1,6 @@
-
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
-
+/**
+ * Created by mmk on 2/14/15.
+ */
+public class MainFragment extends Fragment{
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
+ return inflater.inflate(R.layout.fragment_main, container, false);
+ }
+}
diff --git a/app/src/main/java/de/marcelkapfer/morseconverter/MorseFragment.java b/app/src/main/java/de/marcelkapfer/morseconverter/MorseFragment.java
new file mode 100644
index 0000000..a1930c1
--- /dev/null
+++ b/app/src/main/java/de/marcelkapfer/morseconverter/MorseFragment.java
@@ -0,0 +1,38 @@
+package de.marcelkapfer.morseconverter;
+
+/*
+ This is a Android application for converting writtenMorse and normal morse code.
+ Copyright (C) 2014-2015 Marcel Michael Kapfer
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+ Marcel Michael Kapfer
+ marcelmichaelkapfer@yahoo.co.nz
+
+ */
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Created by mmk on 2/14/15.
+ */
+public class MorseFragment extends Fragment{
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
+ return inflater.inflate(R.layout.fragment_morse, container, false);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/drawer_shadow.9.png b/app/src/main/res/drawable-hdpi/drawer_shadow.9.png
deleted file mode 100644
index 236bff5..0000000
Binary files a/app/src/main/res/drawable-hdpi/drawer_shadow.9.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_action_search.png b/app/src/main/res/drawable-hdpi/ic_action_search.png
deleted file mode 100644
index 772e359..0000000
Binary files a/app/src/main/res/drawable-hdpi/ic_action_search.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_action_share.png b/app/src/main/res/drawable-hdpi/ic_action_share.png
deleted file mode 100644
index a36464b..0000000
Binary files a/app/src/main/res/drawable-hdpi/ic_action_share.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_drawer.png b/app/src/main/res/drawable-hdpi/ic_drawer.png
deleted file mode 100644
index 264b087..0000000
Binary files a/app/src/main/res/drawable-hdpi/ic_drawer.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/drawer_shadow.9.png b/app/src/main/res/drawable-mdpi/drawer_shadow.9.png
deleted file mode 100644
index ffe3a28..0000000
Binary files a/app/src/main/res/drawable-mdpi/drawer_shadow.9.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_action_search.png b/app/src/main/res/drawable-mdpi/ic_action_search.png
deleted file mode 100644
index 4edb1ff..0000000
Binary files a/app/src/main/res/drawable-mdpi/ic_action_search.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_action_share.png b/app/src/main/res/drawable-mdpi/ic_action_share.png
deleted file mode 100644
index 7362f0d..0000000
Binary files a/app/src/main/res/drawable-mdpi/ic_action_share.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_drawer.png b/app/src/main/res/drawable-mdpi/ic_drawer.png
deleted file mode 100644
index 5adf989..0000000
Binary files a/app/src/main/res/drawable-mdpi/ic_drawer.png and /dev/null differ
diff --git a/app/src/main/res/menu/about.xml b/app/src/main/res/drawable-v21/button_action.xml
similarity index 68%
rename from app/src/main/res/menu/about.xml
rename to app/src/main/res/drawable-v21/button_action.xml
index 866d680..0b52e6b 100644
--- a/app/src/main/res/menu/about.xml
+++ b/app/src/main/res/drawable-v21/button_action.xml
@@ -1,3 +1,4 @@
+
-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/display_message.xml b/app/src/main/res/drawable-v21/linearlayout_action.xml
similarity index 69%
rename from app/src/main/res/menu/display_message.xml
rename to app/src/main/res/drawable-v21/linearlayout_action.xml
index 566241b..aec8c86 100644
--- a/app/src/main/res/menu/display_message.xml
+++ b/app/src/main/res/drawable-v21/linearlayout_action.xml
@@ -1,3 +1,4 @@
+
-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png b/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png
deleted file mode 100644
index fabe9d9..0000000
Binary files a/app/src/main/res/drawable-xhdpi/drawer_shadow.9.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_action_search.png b/app/src/main/res/drawable-xhdpi/ic_action_search.png
deleted file mode 100644
index 19658e4..0000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_action_search.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_action_share.png b/app/src/main/res/drawable-xhdpi/ic_action_share.png
deleted file mode 100644
index 40771e4..0000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_action_share.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_drawer.png b/app/src/main/res/drawable-xhdpi/ic_drawer.png
deleted file mode 100644
index a548eeb..0000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_drawer.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png b/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png
deleted file mode 100644
index b91e9d7..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/drawer_shadow.9.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_search.png b/app/src/main/res/drawable-xxhdpi/ic_action_search.png
deleted file mode 100644
index a108638..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_action_search.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_share.png b/app/src/main/res/drawable-xxhdpi/ic_action_share.png
deleted file mode 100644
index 22ed428..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_action_share.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_drawer.png b/app/src/main/res/drawable-xxhdpi/ic_drawer.png
deleted file mode 100644
index c77bb2a..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_drawer.png and /dev/null differ
diff --git a/app/src/main/res/drawable/actionbar.png b/app/src/main/res/drawable/actionbar.png
deleted file mode 100644
index 84d7d9e..0000000
Binary files a/app/src/main/res/drawable/actionbar.png and /dev/null differ
diff --git a/app/src/main/res/menu/display_message_activity_actions.xml b/app/src/main/res/drawable/button_action.xml
similarity index 76%
rename from app/src/main/res/menu/display_message_activity_actions.xml
rename to app/src/main/res/drawable/button_action.xml
index 8b99c23..38a89f8 100644
--- a/app/src/main/res/menu/display_message_activity_actions.xml
+++ b/app/src/main/res/drawable/button_action.xml
@@ -19,13 +19,8 @@
Marcel Michael Kapfer
marcelmichaelkapfer@yahoo.co.nz
- Version 1.0.1
-
-->
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/feature_graphics.png b/app/src/main/res/drawable/feature_graphics.png
new file mode 100644
index 0000000..c91412c
Binary files /dev/null and b/app/src/main/res/drawable/feature_graphics.png differ
diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/drawable/linearlayout_action.xml
similarity index 77%
rename from app/src/main/res/menu/main.xml
rename to app/src/main/res/drawable/linearlayout_action.xml
index 2a160df..51f4445 100644
--- a/app/src/main/res/menu/main.xml
+++ b/app/src/main/res/drawable/linearlayout_action.xml
@@ -1,3 +1,4 @@
+
-
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index 5882dbf..0000000
--- a/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/drawer_list_item.xml b/app/src/main/res/layout/drawer_list_item.xml
deleted file mode 100644
index 8296b3d..0000000
--- a/app/src/main/res/layout/drawer_list_item.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml
index 6e40a8f..bd2e7fe 100644
--- a/app/src/main/res/layout/fragment_about.xml
+++ b/app/src/main/res/layout/fragment_about.xml
@@ -1,3 +1,4 @@
+
+ android:background="#fff"
+ tools:context=".AboutActivity$PlaceholderFragment">
+ android:id="@+id/scrollView">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
diff --git a/app/src/main/res/layout/fragment_display_message.xml b/app/src/main/res/layout/fragment_display_message.xml
deleted file mode 100644
index 11d19d0..0000000
--- a/app/src/main/res/layout/fragment_display_message.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index 759cdbd..b892e17 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -1,3 +1,4 @@
+
-
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ tools:context=".MainActivity"
+ android:animateLayoutChanges="true">
-
+ android:id="@+id/scrollView2">
-
-
-
+ android:layout_height="match_parent"
+ android:orientation="vertical">
-
+
-
+
-
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_morse.xml b/app/src/main/res/layout/fragment_morse.xml
index d2f795f..24b6b4e 100644
--- a/app/src/main/res/layout/fragment_morse.xml
+++ b/app/src/main/res/layout/fragment_morse.xml
@@ -1,3 +1,4 @@
+
-
-
+ android:layout_height="match_parent"
+ android:gravity="top"
+ android:orientation="vertical"
+ tools:context=".MainActivity"
+ android:animateLayoutChanges="true"
+ android:scrollbars="vertical">
-
-
-
+ android:id="@+id/scrollView3">
-
+
+
+
+
-
-
+ android:layout_height="match_parent"
+ android:layout_marginTop="24dp"
+ android:gravity="center"
+ android:minHeight="48dp"
+ android:orientation="vertical"
+ >
-
+
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 3a12140..ba37952 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -19,38 +19,33 @@
Marcel Michael Kapfer
marcelmichaelkapfer@yahoo.co.nz
- Version 1.0.1
-
-->
Morse ConverterEinstellungenGeben Sie einen Text ein
- Verschlüsseln
- Entschlüsseln
+ VERSCHLÜSSELN
+ ENTSCHLÜSSELNIhr TextHallo WeltSucheIhr TextTeilenTeilen Sie Ihren Text:
- Über
- Version
- Entwickler
- Spenden
- Über die App \nVersion: 1.0.1 05. Januar 2015 \Entwickler: Marcel Michael Kapfer \nWebsite: marcel-kapfer.de/projects/morse/ \nKontakt: marcelmichaelkapfer@yahoo.co.nz \nLizens: GNU GPL v3.0
- \n \nFehler \nWenn Du einen Fehler gefunden hast, schreibe mit bitte ein Email an marcelmichaelkapfer@yahoo.co.nz mit einer kurzen Problembeschreibung.
- \n \nVerwendung \nDu kannst eine ausführliche Anwendung auf marcel-kapfer.de/projects/morse/index.html#howto_android finden.
- \n \nFehlender Code \nWenn du auf einen fehlenden Code aufmerksam geworden bist, dann schreibe eine Email an marcelmichaelkapfer@yahoo.co.nz.
-
Über
-
- Navigationsmenü öffnen
- Navigationsmenü schließen
-
- writtenMorse
- Normal Morse
- Über
-
+ Normales Morse
+ Wenn Du einen Fehler gefunden hast, schreibe mit bitte ein Email an marcelmichaelkapfer@yahoo.co.nz
+ Du kannst eine ausführliche Anwendung auf marcel-kapfer.de/projects/morse/index.html#howto_android finden.
+ Wenn du auf einen fehlenden Code aufmerksam geworden bist, dann schreibe eine Email an marcelmichaelkapfer@yahoo.co.nz.
+ 2.0 \n18th February 2015
+ Fehler
+ Kontakt
+ Entwickler
+ Anleitung
+ Lizens
+ Fehlender Code
+
+ TEILEN
+ KOPIEREN
diff --git a/app/src/main/res/values-v14/styles.xml b/app/src/main/res/values-v14/styles.xml
deleted file mode 100644
index 004567b..0000000
--- a/app/src/main/res/values-v14/styles.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/values-v19/styles.xml b/app/src/main/res/values-v19/styles.xml
deleted file mode 100644
index b24a5d7..0000000
--- a/app/src/main/res/values-v19/styles.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml
index f3e7020..3f2a60a 100644
--- a/app/src/main/res/values-w820dp/dimens.xml
+++ b/app/src/main/res/values-w820dp/dimens.xml
@@ -1,10 +1,28 @@
+
+
-
-
+ would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
64dp
-
diff --git a/app/src/main/res/menu/main_activity_actions.xml b/app/src/main/res/values/colors.xml
similarity index 84%
rename from app/src/main/res/menu/main_activity_actions.xml
rename to app/src/main/res/values/colors.xml
index c1079ba..885b549 100644
--- a/app/src/main/res/menu/main_activity_actions.xml
+++ b/app/src/main/res/values/colors.xml
@@ -19,9 +19,9 @@
Marcel Michael Kapfer
marcelmichaelkapfer@yahoo.co.nz
- Version 1.0.1
-
-->
-
+
+ #ffffff
+ #2196F3
+ #2196F3
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 55c1e59..6f0d9a8 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -1,7 +1,27 @@
-
+
+
+16dp16dp
-
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 965416a..6fcb325 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -19,38 +19,42 @@
Marcel Michael Kapfer
marcelmichaelkapfer@yahoo.co.nz
- Version 1.0.1
-
-->
Morse ConverterSettingsEnter a Message
- Encrypt
- Decrypt
+ ENCRYPT
+ DECRYPTYour MessageHello world!SearchYour MessageShareShare your text:
- About Activity
- Version
- Developer
- Donate
- About \nVersion: 1.0.1 5th January 2015 \nDeveloper: Marcel Michael Kapfer \nWebsite: marcel-kapfer.de/projects/morse/ \nContact: marcelmichaelkapfer@yahoo.co.nz \nLicense: GNU GPL v3.0
- \n \nBug \nIf you found a bug, please write me a mail to marcelmichaelkapfer@yahoo.co.nz with a short description of the problem.
- \n \nHow to \nYou can find a detailed guide on marcel-kapfer.de/projects/morse/index.html#howto_android
- \n \nMissing Code \nIf you discovered, that code is missing, then write me a mail to marcelmichaelkapfer@yahoo.co.nz and tell me about it.
+
+ Version
+ Developer
+ Website
+ Contact
+ License
+ Bug
+ How to
+ Missing Code
+
+ 2.0 \n18th February 2015
+ Marcel Michael Kapfer
+ marcel-kapfer.de/projects/morse/
+ marcelmichaelkapfer@yahoo.co.nz
+ GNU GPL v3.0
+ If you found a bug, please write me a mail to marcelmichaelkapfer@yahoo.co.nz with a short description of the problem.
+ You can find a detailed guide on marcel-kapfer.de/projects/morse/index.html#howto_android
+ If you discovered, that code is missing, then write me a mail to marcelmichaelkapfer@yahoo.co.nz and tell me about it.
+
About
-
- Open navigation drawer
- Close navigation drawer
-
- writtenMorse
- Normal Morse
- About
-
-
+ Normal Morse
+
+ SHARE
+ COPY
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 0309de5..2238cb4 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,20 +1,83 @@
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
deleted file mode 100644
index 0d07e8e..0000000
--- a/app/src/main/res/values/themes.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/build.gradle b/build.gradle
index d728479..6356aab 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,10 +1,14 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
buildscript {
repositories {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:1.0.0-rc4'
+ classpath 'com.android.tools.build:gradle:1.0.0'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
}
}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..1d3591c
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,18 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# Default value: -Xmx10248m -XX:MaxPermSize=256m
+# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
\ No newline at end of file
diff --git a/import-summary.txt b/import-summary.txt
deleted file mode 100644
index dbd085b..0000000
--- a/import-summary.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-ECLIPSE ANDROID PROJECT IMPORT SUMMARY
-======================================
-
-Ignored Files:
---------------
-The following files were *not* copied into the new Gradle project; you
-should evaluate whether these are still needed in your project and if
-so manually move them:
-
-* ic_launcher-web.png
-* proguard-project.txt
-
-Replaced Jars with Dependencies:
---------------------------------
-The importer recognized the following .jar files as third party
-libraries and replaced them with Gradle dependencies instead. This has
-the advantage that more explicit version information is known, and the
-libraries can be updated automatically. However, it is possible that
-the .jar file in your project was of an older version than the
-dependency we picked, which could render the project not compileable.
-You can disable the jar replacement in the import wizard and try again:
-
-android-support-v4.jar => com.android.support:support-v4:19.1.0
-
-Moved Files:
-------------
-Android Gradle projects use a different directory structure than ADT
-Eclipse projects. Here's how the projects were restructured:
-
-* AndroidManifest.xml => app/src/main/AndroidManifest.xml
-* assets/ => app/src/main/assets/
-* lint.xml => app/lint.xml
-* res/ => app/src/main/res/
-* src/ => app/src/main/java/
-
-Next Steps:
------------
-You can now build the project. The Gradle project needs network
-connectivity to download dependencies.
-
-Bugs:
------
-If for some reason your project does not build, and you determine that
-it is due to a bug or limitation of the Eclipse to Gradle importer,
-please file a bug at http://b.android.com with category
-Component-Tools.
-
-(This import summary is for your information only, and can be deleted
-after import once you are satisfied with the results.)