Compare Revisions
Last modification
- Rev 20 2011-04-15 23:58:57
- Author: PointedEars
- Log message:
* strings.xml
- Added currency strings
* CurrenciesActivity.java
- Read strings from string.xml
- Use static date formatter
* ConverterApplication.java, MenuActivity.java
- Start service with app
* UpdateService.java, RatesUpdater.java
- Called thread-safe
/trunk/.project |
File deleted |
|
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: default.properties |
=================================================================== |
--- default.properties (revision 20) |
+++ default.properties (nonexistent) |
@@ -1,11 +0,0 @@ |
-# This file is automatically generated by Android Tools. |
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED! |
-# |
-# This file must be checked in Version Control Systems. |
-# |
-# To customize properties used by the Ant build system use, |
-# "build.properties", and override values to adapt the script to your |
-# project structure. |
- |
-# Project target. |
-target=android-8 |
/default.properties |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: doc/A-UM.pdf.zip |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/zip |
/doc/A-UM.pdf.zip |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/zip |
\ No newline at end of property |
Index: doc/Datenbank.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/Datenbank.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/Internet.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/Internet.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/A-UM_Systemanforderungen_V_02.doc |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/msword |
/doc/A-UM_Systemanforderungen_V_02.doc |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/msword |
\ No newline at end of property |
Index: doc/UseCase.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/UseCase.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/A-UM_Prototyp_V 01.pdf |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/pdf |
/doc/A-UM_Prototyp_V 01.pdf |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/pdf |
\ No newline at end of property |
Index: doc/Converter.pdf |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/Converter.pdf |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/A-UM_Systemanforderungen_V_03.pdf |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/pdf |
/doc/A-UM_Systemanforderungen_V_03.pdf |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/pdf |
\ No newline at end of property |
Index: doc/Use-Case-Diagramm.xmi |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/x-uml |
/doc/Use-Case-Diagramm.xmi |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/x-uml |
\ No newline at end of property |
Index: doc/Architektur.xmi |
=================================================================== |
--- doc/Architektur.xmi (revision 20) |
+++ doc/Architektur.xmi (nonexistent) |
@@ -1,109 +0,0 @@ |
-<?xml version="1.0" encoding="UTF-8"?> |
-<XMI verified="false" xmi.version="1.2" timestamp="2011-01-27T20:02:25" xmlns:UML="http://schema.omg.org/spec/UML/1.3"> |
- <XMI.header> |
- <XMI.documentation> |
- <XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter> |
- <XMI.exporterVersion>1.5.8</XMI.exporterVersion> |
- <XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding> |
- </XMI.documentation> |
- <XMI.metamodel xmi.version="1.3" href="UML.xml" xmi.name="UML"/> |
- </XMI.header> |
- <XMI.content> |
- <UML:Model isSpecification="false" isAbstract="false" isLeaf="false" xmi.id="m1" isRoot="false" name="UML-Modell"> |
- <UML:Namespace.ownedElement> |
- <UML:Stereotype visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="folder" name="folder"/> |
- <UML:Stereotype visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="datatype" name="datatype"/> |
- <UML:Model stereotype="folder" visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Logical View" name="Logical View"> |
- <UML:Namespace.ownedElement> |
- <UML:Package stereotype="folder" visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Datatypes" name="Datatypes"> |
- <UML:Namespace.ownedElement> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="GuIDPEDWQEpo" name="int"/> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="KsHFV0NYie4P" name="char"/> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="fFnZwH5ABLLa" name="bool"/> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="ZY50lsm5j3LE" name="float"/> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="3gmjKq8x3uXx" name="double"/> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Ba6KuRvT0yRj" name="short"/> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="oDoXE7lGlVz3" name="long"/> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="J61M0YIB6OV0" name="unsigned int"/> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="nOSlKtU95JgH" name="unsigned short"/> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="OQXAvVDDZCXZ" name="unsigned long"/> |
- <UML:DataType stereotype="datatype" visibility="public" isSpecification="false" namespace="Datatypes" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="ipipBDnzaFku" name="string"/> |
- </UML:Namespace.ownedElement> |
- </UML:Package> |
- <UML:Package visibility="public" isSpecification="false" namespace="Logical View" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="WiRs8x01SCC1" name="de.pointedears.converter"> |
- <UML:Namespace.ownedElement> |
- <UML:Class visibility="public" isSpecification="false" namespace="WiRs8x01SCC1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="OkY7XGujRhg1" name="R"/> |
- </UML:Namespace.ownedElement> |
- </UML:Package> |
- </UML:Namespace.ownedElement> |
- <XMI.extension xmi.extender="umbrello"> |
- <diagrams> |
- <diagram showopsig="1" linecolor="#ff0000" snapx="10" showattribassocs="1" snapy="10" linewidth="0" showattsig="1" showpubliconly="1" showpackage="1" showstereotype="1" name="Klassendiagramm" font="Haettenschweiler,12,-1,5,50,0,0,0,0,0" canvasheight="578" canvaswidth="1136" localid="" snapcsgrid="0" showgrid="0" showops="1" usefillcolor="1" fillcolor="#ffff00" zoom="100" xmi.id="1JN85Vvcj75j" documentation="" showscope="1" snapgrid="0" showatts="1" type="1"> |
- <widgets> |
- <packagewidget width="143" showstereotype="1" x="11" y="10" usesdiagramusefillcolor="1" usesdiagramfillcolor="1" isinstance="0" fillcolor="none" height="45" linecolor="none" xmi.id="WiRs8x01SCC1" usefillcolor="1" linewidth="none" font="Haettenschweiler,12,-1,5,75,0,0,0,0,0"/> |
- <classwidget linecolor="none" usesdiagramfillcolor="1" linewidth="none" showoperations="1" usesdiagramusefillcolor="1" showpubliconly="1" showpackage="1" x="63" showattsigs="601" showstereotype="1" y="223" showattributes="1" font="Haettenschweiler,12,-1,5,75,0,0,0,0,0" width="155" isinstance="0" usefillcolor="1" fillcolor="none" xmi.id="OkY7XGujRhg1" showscope="1" height="33" showopsigs="601"/> |
- </widgets> |
- <messages/> |
- <associations> |
- <assocwidget indexa="1" indexb="1" visibilityA="0" widgetaid="WiRs8x01SCC1" visibilityB="0" roleBdoc="" roleAdoc="" linecolor="none" changeabilityA="900" totalcounta="2" changeabilityB="900" widgetbid="OkY7XGujRhg1" totalcountb="2" type="509" documentation="" linewidth="none"> |
- <linepath> |
- <startpoint startx="154" starty="55"/> |
- <endpoint endx="154" endy="223"/> |
- </linepath> |
- </assocwidget> |
- </associations> |
- </diagram> |
- </diagrams> |
- </XMI.extension> |
- </UML:Model> |
- <UML:Model stereotype="folder" visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Use Case View" name="Use Case View"> |
- <UML:Namespace.ownedElement/> |
- </UML:Model> |
- <UML:Model stereotype="folder" visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Component View" name="Component View"> |
- <UML:Namespace.ownedElement/> |
- </UML:Model> |
- <UML:Model stereotype="folder" visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Deployment View" name="Deployment View"> |
- <UML:Namespace.ownedElement/> |
- </UML:Model> |
- <UML:Model stereotype="folder" visibility="public" isSpecification="false" namespace="m1" isAbstract="false" isLeaf="false" isRoot="false" xmi.id="Entity Relationship Model" name="Entity Relationship Model"> |
- <UML:Namespace.ownedElement/> |
- </UML:Model> |
- </UML:Namespace.ownedElement> |
- </UML:Model> |
- </XMI.content> |
- <XMI.extensions xmi.extender="umbrello"> |
- <docsettings viewid="1JN85Vvcj75j" uniqueid="psTLmeXMpbIt" documentation=""/> |
- <listview> |
- <listitem open="1" type="800" id="Views"> |
- <listitem open="1" type="801" id="Logical View"> |
- <listitem open="0" type="807" id="1JN85Vvcj75j" label="Klassendiagramm"/> |
- <listitem open="1" type="818" id="WiRs8x01SCC1"> |
- <listitem open="1" type="813" id="OkY7XGujRhg1"> |
- <listitem open="1" type="814" label="neues_attribut"/> |
- </listitem> |
- </listitem> |
- <listitem open="0" type="830" id="Datatypes"> |
- <listitem open="1" type="829" id="fFnZwH5ABLLa"/> |
- <listitem open="1" type="829" id="KsHFV0NYie4P"/> |
- <listitem open="1" type="829" id="3gmjKq8x3uXx"/> |
- <listitem open="1" type="829" id="ZY50lsm5j3LE"/> |
- <listitem open="1" type="829" id="GuIDPEDWQEpo"/> |
- <listitem open="1" type="829" id="oDoXE7lGlVz3"/> |
- <listitem open="1" type="829" id="Ba6KuRvT0yRj"/> |
- <listitem open="1" type="829" id="ipipBDnzaFku"/> |
- <listitem open="1" type="829" id="J61M0YIB6OV0"/> |
- <listitem open="1" type="829" id="OQXAvVDDZCXZ"/> |
- <listitem open="1" type="829" id="nOSlKtU95JgH"/> |
- </listitem> |
- </listitem> |
- <listitem open="1" type="802" id="Use Case View"/> |
- <listitem open="1" type="821" id="Component View"/> |
- <listitem open="1" type="827" id="Deployment View"/> |
- <listitem open="1" type="836" id="Entity Relationship Model"/> |
- </listitem> |
- </listview> |
- <codegeneration> |
- <codegenerator language="C++"/> |
- </codegeneration> |
- </XMI.extensions> |
-</XMI> |
/doc/Architektur.xmi |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: doc/A-UM_UseCases_V_02.doc |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/msword |
/doc/A-UM_UseCases_V_02.doc |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/msword |
\ No newline at end of property |
Index: doc/currencies.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/currencies.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/lengths.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/lengths.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/Converter.zargo |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/Converter.zargo |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/A-UM_UseCases_V_02.pdf |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/pdf |
/doc/A-UM_UseCases_V_02.pdf |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/pdf |
\ No newline at end of property |
Index: doc/Verteilung_ConverterApp.jpg |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = image/jpeg |
/doc/Verteilung_ConverterApp.jpg |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-image/jpeg |
\ No newline at end of property |
Index: doc/main_menu.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/main_menu.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/Converter.odt |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/Converter.odt |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/Masseinheit_umrechnen.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = image/png |
/doc/Masseinheit_umrechnen.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-image/png |
\ No newline at end of property |
Index: doc/temperatures.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/temperatures.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/MenuActivity.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/doc/MenuActivity.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: doc/notizen.txt |
=================================================================== |
--- doc/notizen.txt (revision 20) |
+++ doc/notizen.txt (nonexistent) |
@@ -1,4 +0,0 @@ |
-Tipps: |
-- Bearbeitungsfeld nicht editierbar, dann kommt keine Tastatur; |
- stattdessen numerische Tastatur als Buttons im Grid |
-- Debug-Zeile einblenden oder |
\ No newline at end of file |
/doc/notizen.txt |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/com/nwalsh/namespace/package.html |
=================================================================== |
--- src/com/nwalsh/namespace/package.html (revision 20) |
+++ src/com/nwalsh/namespace/package.html (nonexistent) |
@@ -1,49 +0,0 @@ |
-<?xml version="1.0" encoding="UTF-8"?> |
-<!-- |
-/* |
- * The contents of this file are subject to the terms |
- * of the Common Development and Distribution License |
- * (the "License"). You may not use this file except |
- * in compliance with the License. |
- * |
- * You can obtain a copy of the license at |
- * https://jaxp.dev.java.net/CDDLv1.0.html. |
- * See the License for the specific language governing |
- * permissions and limitations under the License. |
- * |
- * When distributing Covered Code, include this CDDL |
- * HEADER in each file and include the License file at |
- * https://jaxp.dev.java.net/CDDLv1.0.html |
- * If applicable add the following below this CDDL HEADER |
- * with the fields enclosed by brackets "[]" replaced with |
- * your own identifying information: Portions Copyright |
- * [year] [name of copyright owner] |
- */ |
- |
-/* |
- * $Id: package.html,v 1.1 2006-03-28 20:54:02 ndw Exp $ |
- * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. |
- */ |
---> |
-<!DOCTYPE html |
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
- |
-<html xmlns="http://www.w3.org/1999/xhtml"> |
- |
-<head> |
- <title>com.nwalsh.namespace</title> |
- |
- <meta name="CVS" |
- content="$Id: package.html,v 1.1 2006-03-28 20:54:02 ndw Exp $" /> |
- <meta name="AUTHOR" |
- content="Norman.Walsh@Sun.COM" /> |
-</head> |
- |
-<body> |
- |
-<p>This package contains a helper class for the |
-javax.xml.namespace.NamespaceContext interface and the XPath APIs.</p> |
- |
-</body> |
-</html> |
/src/com/nwalsh/namespace/package.html |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/com/nwalsh/namespace/NamespaceContextHelper.java |
=================================================================== |
--- src/com/nwalsh/namespace/NamespaceContextHelper.java (revision 20) |
+++ src/com/nwalsh/namespace/NamespaceContextHelper.java (nonexistent) |
@@ -1,394 +0,0 @@ |
-/* |
- * The contents of this file are subject to the terms |
- * of the Common Development and Distribution License |
- * (the "License"). You may not use this file except |
- * in compliance with the License. |
- * |
- * You can obtain a copy of the license at |
- * https://jaxp.dev.java.net/CDDLv1.0.html. |
- * See the License for the specific language governing |
- * permissions and limitations under the License. |
- * |
- * When distributing Covered Code, include this CDDL |
- * HEADER in each file and include the License file at |
- * https://jaxp.dev.java.net/CDDLv1.0.html |
- * If applicable add the following below this CDDL HEADER |
- * with the fields enclosed by brackets "[]" replaced with |
- * your own identifying information: Portions Copyright |
- * [year] [name of copyright owner] |
- */ |
- |
-/* |
- * $Id: NamespaceContextHelper.java,v 1.2 2006-03-28 20:54:02 ndw Exp $ |
- * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. |
- * Portions Copyright 2010 Thomas 'PointedEars' Lahn |
- */ |
- |
-package com.nwalsh.namespace; |
- |
-import java.util.Enumeration; |
-import java.util.Hashtable; |
-import java.util.Iterator; |
- |
-import javax.xml.namespace.NamespaceContext; |
- |
-/* |
- * NOTE: Skip XML 1.1 validity tests because we don't want to recompile |
- * org.apache.xerces for Android -- PointedEars |
- */ |
-// import org.apache.xerces.util.XML11Char; |
- |
-/** |
- * Helper implementation of the javax.xml.namespace.NamespaceContext interface. |
- * |
- * <p> |
- * This class implements the JAXP (1.3+) |
- * {@link javax.xml.namespace.NamespaceContext} interface. This is the interface |
- * used by the JAXP XPath APIs to establish namespace bindings for XPath |
- * expressions. |
- * <p> |
- * |
- * <p> |
- * There are two errors (in retrospect) with respect to the namespace context in |
- * the XPath API. First, there's no way to construct a new one. Given an XPath |
- * you can find out what context it is using, but if you want to construct a new |
- * expression, there's no standard class that you can instantiate to build a new |
- * context. Second, the {@link javax.xml.namespace.NamespaceContext} interface |
- * is obviously (again, in retrospect) missing a method that returns an iterator |
- * that will allow you to find <emph>all</emph> the namespace URIs (and/or |
- * prefixes, which would be equivalent) in the context. |
- * </p> |
- * |
- * <p> |
- * This class addresses the first error by providing an object that you can |
- * instantiate that implements the {@link javax.xml.namespace.NamespaceContext} |
- * interface. It's not a <emph>standard</emph> class, but it at least saves you |
- * the trouble of writing it yourself. (Feel free to move it into your own |
- * package, of course.) |
- * </p> |
- * |
- * <p> |
- * There's really no way to address the second error. An interface, like |
- * {@link javax.xml.namespace.NamespaceContext}, is immutable once released into |
- * the wild in the Java platform. (This is a consequence of backwards |
- * compatibility rules.) To really address the problem, we'll have to invent a |
- * new interface or provide an alternative abstract class that implementations |
- * will be required to use, or something. However, as an experiment, this class |
- * implements a couple of extra methods that we might wish had been in the |
- * interface. These methods are carefully identified as non-standard. Having |
- * them here really isn't all that useful because your underlying XPath |
- * implementation isn't likely to return instances of this class. |
- * </p> |
- * |
- * <p> |
- * There are three ways to instantiate this class: |
- * </p> |
- * |
- * <ol> |
- * <li>The no-argument constructor produces an initially empty namespace |
- * context.</li> |
- * <li>Another constructor takes a prefix and URI and produces a namespace |
- * context with that binding.</li> |
- * <li>Finally, there's a constructor that takes a hash of namespace/uri pairs |
- * and produces a namespace context with those initial bindings.</li> |
- * <li>The obvious constructor, one that takes an existing |
- * {@link javax.xml.namespace.NamespaceContext} so that you can extend it, isn't |
- * there because you can't get the current bindings from that interface; see the |
- * aforementioned bug.</li> |
- * </ol> |
- * |
- * <p> |
- * After the object has been instantiated, you can call the |
- * {@link #add(String,String)} method to add additional bindings to the |
- * namespace context. Because I'm not sure how and where the XPath API |
- * implementations might save pointers to the context object, I've imposed a |
- * number of rules designed to make sure that the context remains coherent: |
- * </p> |
- * |
- * <ul> |
- * <li>Namespace bindings can only be added, not removed.</li> |
- * <li>Once a prefix is bound, its binding cannot be changed.</li> |
- * <li>The XML restrictions on the 'xml' prefix, the 'xmlns' prefix, and their |
- * respective namespace URIs are enforced.</li> |
- * <li>Namespace prefixes must be valid NCNames (or "" for the default |
- * namespace). Note that unprefixed element and attribute names in an XPath |
- * expression can <em>never</em> match a name that's in a namespace. In |
- * particular, setting the default namespace won't have that effect.</li> |
- * </ul> |
- * |
- * <p> |
- * Even with these rules, you can't assume that the context is thread safe. |
- * Don't allow it to be changed while someone else is reading it. |
- * </p> |
- * |
- * <p> |
- * <b>Other notes:</b> |
- * </p> |
- * |
- * <ul> |
- * <li>There's no <code>getNamespaceURIs(String prefix)</code> method because |
- * there can be at most one URI bound to any given prefix. Wrapping an interator |
- * around the mapping available with {@link #getNamespaceURI(String)} seemed |
- * silly.</li> |
- * <li>This class relies on {@link org.apache.xerces.util.XML11Char} to test |
- * that the prefixes are valid NCNames. Note that this means that they're valid |
- * XML 1.1 names. XML 1.1 names are a superset of XML 1.0 names and it didn't |
- * seem worth the extra effort that would be required to allow the user to |
- * choose XML 1.0 or XML 1.1. You might not think it's worth the effort to check |
- * at all. Fair enough.</li> |
- * <li>I've used generics here and there to make the JDK 1.5 compiler stop |
- * complaining. Just delete them for JDK 1.4 and everything should work fine.</li> |
- * </ul> |
- * |
- * @author <a href="mailto:Norman.Walsh@Sun.COM">Norman Walsh</a> |
- * @version $Revision: 1.2 $, $Date: 2006-03-28 20:54:02 $ |
- * @see <a href="http://jaxp.dev.java.net/">Java API for XML Processing</a> |
- * @see <a href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames"> Namespaces |
- * in XML</a> |
- * @see <a href="http://www.w3.org/XML/xml-names-19990114-errata"> Namespaces in |
- * XML Errata</a> |
- */ |
-public class NamespaceContextHelper implements NamespaceContext |
-{ |
- private final Hashtable<String, String> ns = new Hashtable<String, String>(); |
- |
- /** |
- * Creates a new instance of NamespaceContextHelper. |
- * |
- * <p> |
- * Creates an empty namespace context. |
- * </p> |
- */ |
- public NamespaceContextHelper() |
- { |
- } |
- |
- /** |
- * Creates a new instance of NamespaceContextHelper. |
- * |
- * <p> |
- * Creates a namespace context with the bindings specified in |
- * <code>initialNamespaces</code>. |
- * </p> |
- */ |
- public NamespaceContextHelper(Hashtable initialNamespaces) |
- { |
- Enumeration keys = initialNamespaces.keys(); |
- while (keys.hasMoreElements()) |
- { |
- String prefix = (String) keys.nextElement(); |
- String uri = (String) initialNamespaces.get(prefix); |
- |
- this.add(prefix, uri); |
- } |
- } |
- |
- /** |
- * Creates a new instance of NamespaceContextHelper. |
- * |
- * <p> |
- * Creates a namespace context with the specified <code>prefix</code> bound to |
- * <code>uri</code>. |
- * </p> |
- */ |
- public NamespaceContextHelper(String prefix, String uri) |
- { |
- this.add(prefix, uri); |
- } |
- |
- /** |
- * Adds a new prefix/uri binding to the namespace context. |
- * |
- * @throws NullPointerException |
- * if the <code>prefix</code> or <code>uri</code> is |
- * <code>null</code>. |
- * @throws IllegalArgumentException |
- * if the caller attempts to change the binding of |
- * <code>prefix</code>, if the caller attempts to bind the prefix " |
- * <code>xml</code>" |
- * or the namespace " |
- * <code>http://www.w3.org/XML/1998/namespace</code>" incorrectly, |
- * if the caller attempts to bind the prefix "<code>xmlns</code>" or |
- * the namespace |
- * "<code>http://www.w3.org/2000/xmlns</code>", or if the |
- * <code>prefix</code> is |
- * not a valid NCName. |
- */ |
- public void add(String prefix, String uri) |
- { |
- if (prefix == null || uri == null) |
- { |
- throw new NullPointerException( |
- "Null prefix or uri passed to NamespaceContextHelper"); |
- } |
- |
- if (this.ns.containsKey(prefix)) |
- { |
- String curURI = this.ns.get(prefix); |
- if (uri.equals(curURI)) |
- { |
- return; |
- } |
- throw new IllegalArgumentException( |
- "Attempt to change binding in NamespaceContextHelper"); |
- } |
- |
- if ("xml".equals(prefix) |
- && !"http://www.w3.org/XML/1998/namespace".equals(uri)) |
- { |
- throw new IllegalArgumentException( |
- "The prefix 'xml' can only be bound to 'http://www.w3.org/XML/1998/namespace' in NamespaceContextHelper"); |
- } |
- |
- if ("http://www.w3.org/XML/1998/namespace".equals(uri) |
- && !"xml".equals(prefix)) |
- { |
- throw new IllegalArgumentException( |
- "The namespace 'http://www.w3.org/XML/1998/namespace' can only have the prefix 'xml' in NamespaceContextHelper"); |
- } |
- |
- if ("xmlns".equals(prefix) |
- || "http://www.w3.org/2000/xmlns".equals(uri)) |
- { |
- throw new IllegalArgumentException( |
- "Neither the prefix 'xmlns' nor the URI 'http://www.w3.org/2000/xmlns' can be bound in NamespaceContextHelper"); |
- } |
- |
- if ("".equals(prefix)) |
- { |
- this.ns.put(prefix, uri); |
- } |
- else |
- { |
- /* |
- * NOTE: Skip XML 1.1 validity tests because we don't want to recompile |
- * org.apache.xerces for Android -- PointedEars |
- */ |
- // if (XML11Char.isXML11ValidNCName (prefix)) { |
- this.ns.put(prefix, uri); |
- // } else { |
- // throw new IllegalArgumentException |
- // ("Prefix is not a valid NCName in NamespaceContextHelper"); |
- // } |
- } |
- } |
- |
- /** Implements the NamespaceContext getNamespaceURI method. */ |
- public String getNamespaceURI(String prefix) |
- { |
- return this.ns.get(prefix); |
- } |
- |
- /** Implements the NamespaceContext getPrefix method. */ |
- public String getPrefix(String namespaceURI) |
- { |
- if (this.ns.containsValue(namespaceURI)) |
- { |
- Enumeration<String> keys = this.ns.keys(); |
- while (keys.hasMoreElements()) |
- { |
- String pfx = keys.nextElement(); |
- String uri = this.ns.get(pfx); |
- if (namespaceURI.equals(uri)) |
- { |
- return pfx; |
- } |
- } |
- } |
- return null; |
- } |
- |
- /** |
- * Implements a <emph>NON STANDARD</emph> method for finding all of the |
- * prefixes |
- * in the namespace context. |
- * |
- * <p> |
- * Returns an iterator over all of the prefixes in the namespace context. Note |
- * that multiple prefixes may be bound to the same URI. |
- * </p> |
- */ |
- public Iterator getPrefixes() |
- { |
- return this.getPrefixes(null); |
- } |
- |
- /** Implements the NamespaceContext getPrefixes method. */ |
- public Iterator getPrefixes(String namespaceURI) |
- { |
- return new NSIterator(this.ns, namespaceURI); |
- } |
- |
- /** |
- * Implements a <emph>NON STANDARD</emph> method for finding all of the |
- * namespace URIs |
- * in the namespace context. |
- * |
- * <p> |
- * Returns an iterator over all of the namespace URIs in the namespace |
- * context. Note that each namespace URI is returned exactly once, even if it |
- * is bound to several different prefixes. |
- * </p> |
- */ |
- public Iterator getNamespaceURIs() |
- { |
- // Make sure each URI is returned at most once... |
- Hashtable<String, String> uriHash = new Hashtable<String, String>(); |
- Enumeration<String> keys = this.ns.keys(); |
- while (keys.hasMoreElements()) |
- { |
- String pfx = keys.nextElement(); |
- String uri = this.ns.get(pfx); |
- if (!uriHash.containsKey(uri)) |
- { |
- uriHash.put(uri, pfx); |
- } |
- } |
- |
- return new NSIterator(uriHash, null); |
- } |
- |
- /** Implements the Iterator interface over namespace bindings. */ |
- private class NSIterator implements Iterator |
- { |
- private Enumeration<String> keys; |
- |
- public NSIterator(Hashtable<String, String> hash, String value) |
- { |
- this.keys = hash.keys(); |
- if (value != null) |
- { |
- // We have to copy the hash to get only the keys that have the specified |
- // value |
- Hashtable<String, String> vHash = new Hashtable<String, String>(); |
- while (this.keys.hasMoreElements()) |
- { |
- String key = this.keys.nextElement(); |
- String val = hash.get(key); |
- if (val.equals(value)) |
- { |
- vHash.put(key, val); |
- } |
- } |
- this.keys = vHash.keys(); |
- } |
- } |
- |
- public boolean hasNext() |
- { |
- return this.keys.hasMoreElements(); |
- } |
- |
- public String next() |
- { |
- return this.keys.nextElement(); |
- } |
- |
- public void remove() |
- { |
- throw new UnsupportedOperationException( |
- "Cannot remove prefix in NamespaceContextHelper"); |
- } |
- } |
- |
-} |
/src/com/nwalsh/namespace/NamespaceContextHelper.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/app/CurrenciesActivity.java |
=================================================================== |
--- src/de/pointedears/converter/app/CurrenciesActivity.java (revision 20) |
+++ src/de/pointedears/converter/app/CurrenciesActivity.java (nonexistent) |
@@ -1,424 +0,0 @@ |
-package de.pointedears.converter.app; |
- |
-import java.text.DateFormat; |
-import java.util.Date; |
-import java.util.HashMap; |
-import java.util.Map.Entry; |
- |
-import android.app.Activity; |
-import android.content.BroadcastReceiver; |
-import android.content.Context; |
-import android.content.Intent; |
-import android.content.IntentFilter; |
-import android.os.Bundle; |
-import android.text.Editable; |
-import android.view.KeyEvent; |
-import android.view.Menu; |
-import android.view.MenuInflater; |
-import android.view.MenuItem; |
-import android.view.View; |
-import android.view.View.OnClickListener; |
-import android.view.View.OnKeyListener; |
-import android.widget.AdapterView; |
-import android.widget.AdapterView.OnItemSelectedListener; |
-import android.widget.Button; |
-import android.widget.EditText; |
-import android.widget.Spinner; |
-import android.widget.TableLayout; |
-import android.widget.TableRow; |
-import android.widget.TextView; |
-import de.pointedears.converter.R; |
-import de.pointedears.converter.db.ConversionData; |
-import de.pointedears.converter.db.CurrenciesDatabase; |
-import de.pointedears.converter.helpers.Notifier; |
-import de.pointedears.converter.helpers.UpdateService; |
- |
-/** |
- * Activity that implements currency conversion |
- * |
- * @author pelinux |
- */ |
-public class CurrenciesActivity extends Activity |
-{ |
- /** |
- * String to use to indicate that an exchange rate has never been updated |
- */ |
- private String TEXT_NEVER; |
- |
- /* |
- * Constants for mapping value strings |
- * |
- * @todo: Use resource IDs |
- */ |
- /** |
- * Database field/spinner value for Swiss Francs |
- */ |
- public static String VALUE_CHF; |
- |
- /** |
- * Database field/spinner value for Euros |
- */ |
- public static String VALUE_EUR; |
- |
- /** |
- * Database field/spinner value for US Dollars |
- */ |
- public static String VALUE_USD; |
- |
- /* Unit spinners (dropdowns) */ |
- private Spinner spinnerUnit1; |
- private Spinner spinnerUnit2; |
- private static CurrenciesDatabase database; |
- |
- private static HashMap<String, ConversionData> conversionRates; |
- |
- private static String EXCHANGE_RATES_UPDATED_TO; |
- |
- private final static DateFormat dateFormatter = DateFormat |
- .getDateInstance(DateFormat.SHORT); |
- |
- /** |
- * Receiver for intent broadcasts, registered in |
- * {@link CurrenciesActivity#onCreate(Bundle)} |
- */ |
- public class UpdateBroadcastReceiver extends BroadcastReceiver |
- { |
- /** |
- * Notification message template |
- */ |
- |
- /* |
- * (non-Javadoc) |
- * |
- * @see android.content.BroadcastReceiver#onReceive(android.content.Context, |
- * android.content.Intent) |
- */ |
- @Override |
- public void onReceive(Context context, Intent intent) |
- { |
- if (intent.getAction().equals(UpdateService.ACTION_UPDATE)) |
- { |
- CurrenciesActivity.this.fillTableRates(); |
- |
- Bundle extras = intent.getExtras(); |
- Notifier.sendMessage( |
- CurrenciesActivity.this, |
- extras.get(UpdateService.EXTRA_NUM_RATES) |
- + CurrenciesActivity.EXCHANGE_RATES_UPDATED_TO |
- + CurrenciesActivity.dateFormatter.format(extras |
- .get(UpdateService.EXTRA_DATE))); |
- } |
- } |
- } |
- |
- /** Called when the activity is first created. */ |
- @Override |
- public void onCreate(Bundle savedInstanceState) |
- { |
- super.onCreate(savedInstanceState); |
- this.setContentView(R.layout.activity_currencies); |
- |
- this.TEXT_NEVER = |
- this.getString(R.string.currencies_never_updated); |
- |
- CurrenciesActivity.VALUE_CHF = this.getString(R.string.currencies_CHF); |
- CurrenciesActivity.VALUE_EUR = this.getString(R.string.currencies_EUR); |
- CurrenciesActivity.VALUE_USD = this.getString(R.string.currencies_USD); |
- |
- CurrenciesActivity.EXCHANGE_RATES_UPDATED_TO = |
- this.getString(R.string.currencies_notification); |
- |
- UpdateBroadcastReceiver br = new UpdateBroadcastReceiver(); |
- this.registerReceiver(br, new IntentFilter(UpdateService.ACTION_UPDATE)); |
- |
- /* Set up currency database, and retrieve conversion rates */ |
- CurrenciesActivity.database = new CurrenciesDatabase(this); |
- this.setConversionRates(CurrenciesActivity.database |
- .getConversionRates()); |
- this.fillTableRates(); |
- |
- final EditText editValue1 = |
- (EditText) this.findViewById(R.id.currencies_edit_value1); |
- final EditText editValue2 = |
- (EditText) this.findViewById(R.id.currencies_edit_value2); |
- |
- final OnKeyListener editValue1OnKey = new OnKeyListener() { |
- @Override |
- public boolean onKey(View v, int keyCode, KeyEvent event) |
- { |
- Editable editable1 = ((EditText) v).getText(); |
- |
- Double value1; |
- try |
- { |
- value1 = Double.parseDouble(editable1.toString()); |
- } |
- catch (NumberFormatException e) |
- { |
- value1 = null; |
- } |
- |
- String string2 = ""; //$NON-NLS-1$ |
- if (value1 != null) |
- { |
- string2 = CurrenciesActivity.this.getConvertedValue(value1, false); |
- } |
- |
- editValue2.setText(string2); |
- |
- return false; |
- } |
- }; |
- editValue1.setOnKeyListener(editValue1OnKey); |
- |
- final OnKeyListener editValue2OnKey = new OnKeyListener() { |
- @Override |
- public boolean onKey(View v, int keyCode, KeyEvent event) |
- { |
- Editable editable2 = ((EditText) v).getText(); |
- |
- Double value2; |
- try |
- { |
- value2 = Double.parseDouble(editable2.toString()); |
- } |
- catch (NumberFormatException e) |
- { |
- value2 = null; |
- } |
- |
- String string1 = ""; //$NON-NLS-1$ |
- if (value2 != null) |
- { |
- string1 = CurrenciesActivity.this.getConvertedValue(value2, true); |
- } |
- |
- editValue1.setText(string1); |
- |
- return false; |
- } |
- }; |
- editValue2.setOnKeyListener(editValue2OnKey); |
- |
- this.spinnerUnit1 = |
- (Spinner) this.findViewById(R.id.currencies_spinner_unit1); |
- this.spinnerUnit2 = |
- (Spinner) this.findViewById(R.id.currencies_spinner_unit2); |
- |
- this.spinnerUnit1.setOnItemSelectedListener(new OnItemSelectedListener() { |
- @Override |
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, |
- long arg3) |
- { |
- /* Simulate input in second EditText so that first EditText is updated */ |
- editValue2OnKey.onKey(editValue2, 0, null); |
- } |
- |
- @Override |
- public void onNothingSelected(AdapterView<?> arg0) |
- { |
- /* no-op */ |
- } |
- }); |
- |
- this.spinnerUnit2.setSelection(1); |
- this.spinnerUnit2.setOnItemSelectedListener(new OnItemSelectedListener() { |
- @Override |
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, |
- long arg3) |
- { |
- /* Simulate input in first EditText so that second EditText is updated */ |
- editValue1OnKey.onKey(editValue1, 0, null); |
- } |
- |
- @Override |
- public void onNothingSelected(AdapterView<?> arg0) |
- { |
- /* no-op */ |
- } |
- }); |
- |
- Button buttonClear = |
- (Button) this.findViewById(R.id.currencies_button_clear); |
- buttonClear.setOnClickListener(new OnClickListener() { |
- |
- @SuppressWarnings("nls") |
- @Override |
- public void onClick(View v) |
- { |
- editValue1.setText(""); |
- editValue2.setText(""); |
- } |
- }); |
- } |
- |
- /** |
- * Fills the table with currency conversion rates |
- */ |
- public void fillTableRates() |
- { |
- TableLayout tableRates = |
- (TableLayout) this.findViewById(R.id.currencies_table_rates); |
- |
- /* Remove any pre-existing currency rows */ |
- while (tableRates.getChildCount() > 3) |
- { |
- tableRates.removeViewAt(3); |
- } |
- |
- for (Entry<String, ConversionData> factorEntry : CurrenciesActivity |
- .getConversionRates() |
- .entrySet()) |
- { |
- TableRow row = new TableRow(this); |
- |
- TextView columnCurrency1 = new TextView(this); |
- columnCurrency1.setText(factorEntry.getKey()); |
- row.addView(columnCurrency1); |
- |
- TextView columnRate = new TextView(this); |
- final ConversionData conversionData = factorEntry.getValue(); |
- columnRate.setText(conversionData.getRate().toString()); |
- row.addView(columnRate); |
- |
- TextView columnUpdated = new TextView(this); |
- Date updated = conversionData.getUpdated(); |
- if (updated.getTime() > 0) |
- { |
- columnUpdated.setText(CurrenciesActivity.dateFormatter.format(updated)); |
- } |
- else |
- { |
- columnUpdated.setText(this.TEXT_NEVER); |
- } |
- |
- row.addView(columnUpdated); |
- |
- tableRates.addView(row); |
- } |
- } |
- |
- /** |
- * @param value |
- * @return |
- */ |
- private String getConvertedValue(double value, boolean reverse) |
- { |
- int selectedItemPosition1 = this.spinnerUnit1.getSelectedItemPosition(); |
- int selectedItemPosition2 = this.spinnerUnit2.getSelectedItemPosition(); |
- String[] items = |
- this.getResources().getStringArray(R.array.currency_units_values); |
- String selectedItemValue1 = items[selectedItemPosition1]; |
- String selectedItemValue2 = items[selectedItemPosition2]; |
- |
- if (reverse) |
- { |
- String tmp = selectedItemValue1; |
- selectedItemValue1 = selectedItemValue2; |
- selectedItemValue2 = tmp; |
- } |
- |
- Double newValue = value; |
- |
- /* |
- * NOTE: Had to do it the complicated way because somehow the Android SDK |
- * won't get it another way |
- */ |
- ConversionData conversionData1 = null; |
- Double factorToEuro = 1.0; |
- if (selectedItemValue1 != null) |
- { |
- conversionData1 = |
- CurrenciesActivity.getConversionRates().get(selectedItemValue1); |
- if (conversionData1 != null) |
- { |
- factorToEuro = conversionData1.getRate(); |
- } |
- } |
- |
- ConversionData conversionData2 = null; |
- Double factorFromEuro = 1.0; |
- if (selectedItemValue2 != null) |
- { |
- conversionData2 = |
- CurrenciesActivity.getConversionRates().get(selectedItemValue2); |
- if (conversionData2 != null) |
- { |
- factorFromEuro = conversionData2.getRate(); |
- } |
- } |
- |
- newValue = newValue / factorToEuro * factorFromEuro; |
- |
- return newValue.toString(); |
- } |
- |
- /* |
- * (non-Javadoc) |
- * |
- * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu) |
- */ |
- /* |
- * (non-Javadoc) |
- * |
- * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu) |
- */ |
- @Override |
- public boolean onCreateOptionsMenu(Menu menu) |
- { |
- MenuInflater inflater = this.getMenuInflater(); |
- inflater.inflate(R.menu.options, menu); |
- return true; |
- } |
- |
- /* |
- * (non-Javadoc) |
- * |
- * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem) |
- */ |
- @Override |
- public boolean onOptionsItemSelected(MenuItem item) |
- { |
- /* Handle item selection */ |
- switch (item.getItemId()) |
- { |
- case R.id.item_options_update: |
- /* |
- * Request the update service to run a thread to fetch the rates from |
- * the Web (project requirement) |
- */ |
- Intent intent = new Intent(this, UpdateService.class); |
- intent.setAction(UpdateService.ACTION_UPDATE); |
- this.startService(intent); |
- return true; |
- |
- default: |
- return super.onOptionsItemSelected(item); |
- } |
- } |
- |
- /** |
- * @return the conversionRates |
- */ |
- public static HashMap<String, ConversionData> getConversionRates() |
- { |
- return CurrenciesActivity.conversionRates; |
- } |
- |
- /** |
- * @param conversionRates |
- * the conversionRates to set |
- */ |
- public void setConversionRates(HashMap<String, ConversionData> conversionRates) |
- { |
- CurrenciesActivity.conversionRates = conversionRates; |
- } |
- |
- /** |
- * @return the database |
- */ |
- public static CurrenciesDatabase getDatabase() |
- { |
- return CurrenciesActivity.database; |
- } |
-} |
/src/de/pointedears/converter/app/CurrenciesActivity.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/app/LengthsActivity.java |
=================================================================== |
--- src/de/pointedears/converter/app/LengthsActivity.java (revision 20) |
+++ src/de/pointedears/converter/app/LengthsActivity.java (nonexistent) |
@@ -1,282 +0,0 @@ |
-package de.pointedears.converter.app; |
- |
-import java.util.HashMap; |
- |
-import android.app.Activity; |
-import android.os.Bundle; |
-import android.text.Editable; |
-import android.view.KeyEvent; |
-import android.view.View; |
-import android.view.View.OnClickListener; |
-import android.view.View.OnKeyListener; |
-import android.widget.AdapterView; |
-import android.widget.AdapterView.OnItemSelectedListener; |
-import android.widget.Button; |
-import android.widget.EditText; |
-import android.widget.Spinner; |
-import de.pointedears.converter.R; |
- |
-/** |
- * Activity that implements length conversion |
- * |
- * @author pelinux |
- */ |
-public class LengthsActivity extends Activity |
-{ |
- /* |
- * Constants for mapping value strings to internal IDs |
- */ |
- private static final String VALUE_INCHES = "inch"; //$NON-NLS-1$ |
- private static final String VALUE_KILOMETERS = "km"; //$NON-NLS-1$ |
- private static final String VALUE_METERS = "m"; //$NON-NLS-1$ |
- private static final String VALUE_MILES = "mi"; //$NON-NLS-1$ |
- private static final int ITEM_INCHES = 0; |
- private static final int ITEM_KILOMETERS = 1; |
- private static final int ITEM_METERS = 2; |
- private static final int ITEM_MILES = 3; |
- |
- /** |
- * Maps value strings to internal IDs |
- */ |
- private final static HashMap<String, Integer> valueToId = |
- new HashMap<String, Integer>(); |
- static |
- { |
- LengthsActivity.valueToId.put(LengthsActivity.VALUE_INCHES, |
- LengthsActivity.ITEM_INCHES); |
- LengthsActivity.valueToId.put(LengthsActivity.VALUE_KILOMETERS, |
- LengthsActivity.ITEM_KILOMETERS); |
- LengthsActivity.valueToId.put(LengthsActivity.VALUE_METERS, |
- LengthsActivity.ITEM_METERS); |
- LengthsActivity.valueToId.put(LengthsActivity.VALUE_MILES, |
- LengthsActivity.ITEM_MILES); |
- } |
- |
- /* Unit spinners (dropdowns) */ |
- private Spinner spinnerUnit1; |
- private Spinner spinnerUnit2; |
- |
- /** Called when the activity is first created. */ |
- |
- @Override |
- public void onCreate(Bundle savedInstanceState) |
- { |
- super.onCreate(savedInstanceState); |
- this.setContentView(R.layout.activity_lengths); |
- |
- final EditText editValue1 = (EditText) this.findViewById(R.id.edit_value1); |
- final EditText editValue2 = (EditText) this.findViewById(R.id.edit_value2); |
- |
- final OnKeyListener editValue1OnKey = new OnKeyListener() { |
- @Override |
- public boolean onKey(View v, int keyCode, KeyEvent event) |
- { |
- Editable editable1 = ((EditText) v).getText(); |
- |
- Double value1; |
- try |
- { |
- value1 = Double.parseDouble(editable1.toString()); |
- } |
- catch (NumberFormatException e) |
- { |
- value1 = null; |
- } |
- |
- String string2 = ""; //$NON-NLS-1$ |
- if (value1 != null) |
- { |
- string2 = LengthsActivity.this.getConvertedValue(value1, false); |
- } |
- |
- editValue2.setText(string2); |
- |
- return false; |
- } |
- }; |
- editValue1.setOnKeyListener(editValue1OnKey); |
- |
- final OnKeyListener editValue2OnKey = new OnKeyListener() { |
- @Override |
- public boolean onKey(View v, int keyCode, KeyEvent event) |
- { |
- Editable editable2 = ((EditText) v).getText(); |
- |
- Double value2; |
- try |
- { |
- value2 = Double.parseDouble(editable2.toString()); |
- } |
- catch (NumberFormatException e) |
- { |
- value2 = null; |
- } |
- |
- String string1 = ""; //$NON-NLS-1$ |
- if (value2 != null) |
- { |
- string1 = LengthsActivity.this.getConvertedValue(value2, true); |
- } |
- |
- editValue1.setText(string1); |
- |
- return false; |
- } |
- }; |
- editValue2.setOnKeyListener(editValue2OnKey); |
- |
- this.spinnerUnit1 = (Spinner) this.findViewById(R.id.spinner_unit1); |
- this.spinnerUnit2 = (Spinner) this.findViewById(R.id.spinner_unit2); |
- |
- this.spinnerUnit1.setOnItemSelectedListener(new OnItemSelectedListener() { |
- @Override |
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, |
- long arg3) |
- { |
- /* Simulate input in second EditText so that first EditText is updated */ |
- editValue2OnKey.onKey(editValue2, 0, null); |
- } |
- |
- @Override |
- public void onNothingSelected(AdapterView<?> arg0) |
- { |
- /* no-op */ |
- } |
- }); |
- |
- this.spinnerUnit2.setSelection(1); |
- this.spinnerUnit2.setOnItemSelectedListener(new OnItemSelectedListener() { |
- @Override |
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, |
- long arg3) |
- { |
- /* Simulate input in first EditText so that second EditText is updated */ |
- editValue1OnKey.onKey(editValue1, 0, null); |
- } |
- |
- @Override |
- public void onNothingSelected(AdapterView<?> arg0) |
- { |
- /* no-op */ |
- } |
- }); |
- |
- Button buttonClear = |
- (Button) this.findViewById(R.id.lengths_button_clear); |
- buttonClear.setOnClickListener(new OnClickListener() { |
- |
- @SuppressWarnings("nls") |
- @Override |
- public void onClick(View v) |
- { |
- editValue1.setText(""); |
- editValue2.setText(""); |
- } |
- }); |
- } |
- |
- /** |
- * @param value |
- * @return |
- */ |
- private String getConvertedValue(double value, boolean reverse) |
- { |
- int selectedItemPosition1 = this.spinnerUnit1.getSelectedItemPosition(); |
- int selectedItemPosition2 = this.spinnerUnit2.getSelectedItemPosition(); |
- String[] itemArray = |
- this.getResources().getStringArray(R.array.length_units_values); |
- String selectedItemValue1 = itemArray[selectedItemPosition1]; |
- String selectedItemValue2 = itemArray[selectedItemPosition2]; |
- |
- if (reverse) |
- { |
- String tmp = selectedItemValue1; |
- selectedItemValue1 = selectedItemValue2; |
- selectedItemValue2 = tmp; |
- } |
- |
- int itemId1 = LengthsActivity.valueToId.get(selectedItemValue1); |
- int itemId2 = LengthsActivity.valueToId.get(selectedItemValue2); |
- |
- Double newValue = value; |
- |
- switch (itemId1) |
- { |
- case ITEM_INCHES: |
- switch (itemId2) |
- { |
- case ITEM_KILOMETERS: |
- /* see ITEM_METERS */ |
- newValue = new Double((value * 0.0254) / 1000); |
- break; |
- |
- case ITEM_METERS: |
- newValue = new Double(value * 0.0254); |
- break; |
- |
- case ITEM_MILES: |
- /* 12 in/ft and 5280 ft/mi */ |
- newValue = new Double(value / 12 / 5280); |
- break; |
- } |
- break; |
- |
- case ITEM_KILOMETERS: |
- switch (itemId2) |
- { |
- case ITEM_INCHES: |
- /* 1 m = 39.370 in */ |
- newValue = new Double(value * 1000 * 39.370); |
- break; |
- |
- case ITEM_METERS: |
- newValue = new Double(value * 1000); |
- break; |
- |
- case ITEM_MILES: |
- newValue = new Double(value / 1.609344); |
- break; |
- } |
- break; |
- |
- case ITEM_METERS: |
- switch (itemId2) |
- { |
- case ITEM_INCHES: |
- /* 1 m = 39.370 in */ |
- newValue = new Double(value * 39.370); |
- break; |
- |
- case ITEM_KILOMETERS: |
- newValue = new Double(value / 1000); |
- break; |
- |
- case ITEM_MILES: |
- /* 1 mi = 1609.344 m */ |
- newValue = new Double(value / 1609.344); |
- break; |
- } |
- break; |
- |
- case ITEM_MILES: |
- switch (itemId2) |
- { |
- case ITEM_INCHES: |
- /* 1 mi = 5280 ft, 1 ft = 12 in */ |
- newValue = new Double(value * 5280 * 12); |
- break; |
- |
- case ITEM_KILOMETERS: |
- newValue = new Double(value * 1.609344); |
- break; |
- |
- case ITEM_METERS: |
- newValue = new Double(value * 1609.344); |
- break; |
- } |
- break; |
- } |
- |
- return newValue.toString(); |
- } |
-} |
/src/de/pointedears/converter/app/LengthsActivity.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/app/TemperaturesActivity.java |
=================================================================== |
--- src/de/pointedears/converter/app/TemperaturesActivity.java (revision 20) |
+++ src/de/pointedears/converter/app/TemperaturesActivity.java (nonexistent) |
@@ -1,275 +0,0 @@ |
-package de.pointedears.converter.app; |
- |
-import java.util.HashMap; |
- |
-import android.app.Activity; |
-import android.os.Bundle; |
-import android.text.Editable; |
-import android.view.KeyEvent; |
-import android.view.View; |
-import android.view.View.OnClickListener; |
-import android.view.View.OnKeyListener; |
-import android.widget.AdapterView; |
-import android.widget.AdapterView.OnItemSelectedListener; |
-import android.widget.Button; |
-import android.widget.EditText; |
-import android.widget.Spinner; |
-import android.widget.TextView; |
-import de.pointedears.converter.R; |
- |
-/** |
- * Activity that implements length conversion |
- * |
- * @author pelinux |
- */ |
-public class TemperaturesActivity extends Activity |
-{ |
- /* |
- * Constants for mapping value strings to internal IDs |
- */ |
- private static final String VALUE_CELSIUS = "C"; //$NON-NLS-1$ |
- private static final String VALUE_FAHRENHEIT = "F"; //$NON-NLS-1$ |
- private static final String VALUE_KELVIN = "K"; //$NON-NLS-1$ |
- private static final int ITEM_CELSIUS = 0; |
- private static final int ITEM_FAHRENHEIT = 1; |
- private static final int ITEM_KELVIN = 2; |
- |
- /** |
- * Maps value strings to internal IDs |
- */ |
- private final static HashMap<String, Integer> valueToId = |
- new HashMap<String, Integer>(); |
- |
- /* Unit spinners (dropdowns) */ |
- private Spinner spinnerUnit1; |
- private Spinner spinnerUnit2; |
- |
- /* Hint that value is off scale */ |
- private TextView textOffScale; |
- |
- static |
- { |
- TemperaturesActivity.valueToId.put(TemperaturesActivity.VALUE_CELSIUS, |
- TemperaturesActivity.ITEM_CELSIUS); |
- TemperaturesActivity.valueToId.put(TemperaturesActivity.VALUE_FAHRENHEIT, |
- TemperaturesActivity.ITEM_FAHRENHEIT); |
- TemperaturesActivity.valueToId.put(TemperaturesActivity.VALUE_KELVIN, |
- TemperaturesActivity.ITEM_KELVIN); |
- } |
- |
- /** Called when the activity is first created. */ |
- |
- @Override |
- public void onCreate(Bundle savedInstanceState) |
- { |
- super.onCreate(savedInstanceState); |
- this.setContentView(R.layout.activity_temperatures); |
- |
- this.textOffScale = |
- (TextView) this.findViewById(R.id.temperatures_text_off_scale); |
- |
- final EditText editValue1 = |
- (EditText) this.findViewById(R.id.temperatures_edit_value1); |
- final EditText editValue2 = |
- (EditText) this.findViewById(R.id.temperatures_edit_value2); |
- |
- final OnKeyListener editValue1OnKey = new OnKeyListener() { |
- @Override |
- public boolean onKey(View v, int keyCode, KeyEvent event) |
- { |
- Editable editable1 = ((EditText) v).getText(); |
- |
- Double value1; |
- try |
- { |
- value1 = Double.parseDouble(editable1.toString()); |
- } |
- catch (NumberFormatException e) |
- { |
- value1 = null; |
- } |
- |
- String string2 = ""; //$NON-NLS-1$ |
- if (value1 != null) |
- { |
- string2 = TemperaturesActivity.this.getConvertedValue(value1, false); |
- } |
- |
- editValue2.setText(string2); |
- |
- return false; |
- } |
- }; |
- editValue1.setOnKeyListener(editValue1OnKey); |
- |
- final OnKeyListener editValue2OnKey = new OnKeyListener() { |
- @Override |
- public boolean onKey(View v, int keyCode, KeyEvent event) |
- { |
- Editable editable2 = ((EditText) v).getText(); |
- |
- Double value2; |
- try |
- { |
- value2 = Double.parseDouble(editable2.toString()); |
- } |
- catch (NumberFormatException e) |
- { |
- value2 = null; |
- } |
- |
- String string1 = ""; //$NON-NLS-1$ |
- if (value2 != null) |
- { |
- string1 = TemperaturesActivity.this.getConvertedValue(value2, true); |
- } |
- |
- editValue1.setText(string1); |
- |
- return false; |
- } |
- }; |
- editValue2.setOnKeyListener(editValue2OnKey); |
- |
- this.spinnerUnit1 = |
- (Spinner) this.findViewById(R.id.temperatures_spinner_unit1); |
- this.spinnerUnit2 = |
- (Spinner) this.findViewById(R.id.temperatures_spinner_unit2); |
- |
- this.spinnerUnit1.setOnItemSelectedListener(new OnItemSelectedListener() { |
- @Override |
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, |
- long arg3) |
- { |
- /* Simulate input in second EditText so that first EditText is updated */ |
- editValue2OnKey.onKey(editValue2, 0, null); |
- } |
- |
- @Override |
- public void onNothingSelected(AdapterView<?> arg0) |
- { |
- /* no-op */ |
- } |
- }); |
- |
- this.spinnerUnit2.setSelection(1); |
- this.spinnerUnit2.setOnItemSelectedListener(new OnItemSelectedListener() { |
- @Override |
- public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, |
- long arg3) |
- { |
- /* Simulate input in first EditText so that second EditText is updated */ |
- editValue1OnKey.onKey(editValue1, 0, null); |
- } |
- |
- @Override |
- public void onNothingSelected(AdapterView<?> arg0) |
- { |
- /* no-op */ |
- } |
- }); |
- |
- Button buttonClear = |
- (Button) this.findViewById(R.id.temperatures_button_clear); |
- buttonClear.setOnClickListener(new OnClickListener() { |
- |
- @SuppressWarnings("nls") |
- @Override |
- public void onClick(View v) |
- { |
- editValue1.setText(""); |
- editValue2.setText(""); |
- } |
- }); |
- } |
- |
- /** |
- * @param value |
- * @return |
- */ |
- private String getConvertedValue(double value, boolean reverse) |
- { |
- int selectedItemPosition1 = this.spinnerUnit1.getSelectedItemPosition(); |
- int selectedItemPosition2 = this.spinnerUnit2.getSelectedItemPosition(); |
- String[] itemArray = |
- this.getResources().getStringArray(R.array.temperature_units_values); |
- String selectedItemValue1 = itemArray[selectedItemPosition1]; |
- String selectedItemValue2 = itemArray[selectedItemPosition2]; |
- |
- if (reverse) |
- { |
- String tmp = selectedItemValue1; |
- selectedItemValue1 = selectedItemValue2; |
- selectedItemValue2 = tmp; |
- } |
- |
- int itemId1 = TemperaturesActivity.valueToId.get(selectedItemValue1); |
- int itemId2 = TemperaturesActivity.valueToId.get(selectedItemValue2); |
- |
- Double newValue = value; |
- |
- this.textOffScale.setVisibility(View.INVISIBLE); |
- |
- switch (itemId1) |
- { |
- case ITEM_CELSIUS: |
- switch (itemId2) |
- { |
- case ITEM_FAHRENHEIT: |
- newValue = new Double(value * 9.0 / 5 + 32); |
- break; |
- |
- case ITEM_KELVIN: |
- newValue = new Double(value + 273.15); |
- |
- if (newValue < 0.0) |
- { |
- this.textOffScale.setVisibility(View.VISIBLE); |
- return "*" + newValue.toString(); //$NON-NLS-1$ |
- } |
- break; |
- } |
- break; |
- |
- case ITEM_FAHRENHEIT: |
- switch (itemId2) |
- { |
- case ITEM_CELSIUS: |
- newValue = new Double((value - 32) * 5.0 / 9); |
- break; |
- |
- case ITEM_KELVIN: |
- newValue = new Double((value + 459.67) * 5.0 / 9); |
- |
- if (newValue < 0.0) |
- { |
- this.textOffScale.setVisibility(View.VISIBLE); |
- return "*" + newValue.toString(); //$NON-NLS-1$ |
- } |
- break; |
- } |
- break; |
- |
- case ITEM_KELVIN: |
- switch (itemId2) |
- { |
- case ITEM_CELSIUS: |
- newValue = new Double(value - 273.15); |
- break; |
- |
- case ITEM_FAHRENHEIT: |
- newValue = new Double(value * 9.0 / 5 - 459.67); |
- break; |
- } |
- |
- if (value < 0.0) |
- { |
- this.textOffScale.setVisibility(View.VISIBLE); |
- return "*" + newValue.toString(); //$NON-NLS-1$ |
- } |
- break; |
- } |
- |
- return newValue.toString(); |
- } |
-} |
/src/de/pointedears/converter/app/TemperaturesActivity.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/MenuActivity.java |
=================================================================== |
--- src/de/pointedears/converter/MenuActivity.java (revision 20) |
+++ src/de/pointedears/converter/MenuActivity.java (nonexistent) |
@@ -1,203 +0,0 @@ |
-package de.pointedears.converter; |
- |
-/* |
- * Copyright (C) 2007 The Android Open Source Project |
- * |
- * Licensed under the Apache License, Version 2.0 (the "License"); |
- * you may not use this file except in compliance with the License. |
- * You may obtain a copy of the License at |
- * |
- * http://www.apache.org/licenses/LICENSE-2.0 |
- * |
- * Unless required by applicable law or agreed to in writing, software |
- * distributed under the License is distributed on an "AS IS" BASIS, |
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
- * See the License for the specific language governing permissions and |
- * limitations under the License. |
- */ |
- |
-import java.text.Collator; |
-import java.util.ArrayList; |
-import java.util.Collections; |
-import java.util.Comparator; |
-import java.util.HashMap; |
-import java.util.List; |
-import java.util.Map; |
- |
-import android.app.ListActivity; |
-import android.content.Intent; |
-import android.content.pm.PackageManager; |
-import android.content.pm.ResolveInfo; |
-import android.os.Bundle; |
-import android.view.View; |
-import android.widget.ListView; |
-import android.widget.SimpleAdapter; |
- |
-/** |
- * Generates the main menu as a list of activities from the manifest |
- * |
- * @author |
- * Thomas 'PointedEars' Lahn; |
- * Class courtesy of The Android Open Source Project |
- * (Android 2.2 SDK Examples), slightly adapted |
- */ |
-public class MenuActivity extends ListActivity |
-{ |
- @Override |
- public void onCreate(Bundle savedInstanceState) |
- { |
- super.onCreate(savedInstanceState); |
- |
- Intent intent = this.getIntent(); |
- String path = intent.getStringExtra("de.pointedears.converter.Path"); //$NON-NLS-1$ |
- |
- if (path == null) |
- { |
- path = ""; //$NON-NLS-1$ |
- } |
- |
- this.setListAdapter(new SimpleAdapter(this, this.getData(path), |
- android.R.layout.simple_list_item_1, new String[] { "title" }, //$NON-NLS-1$ |
- new int[] { android.R.id.text1 })); |
- this.getListView().setTextFilterEnabled(true); |
- } |
- |
- /** |
- * @param prefix |
- * @return |
- */ |
- protected List getData(String prefix) |
- { |
- List<Map> myData = new ArrayList<Map>(); |
- |
- Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); |
- mainIntent.addCategory(ConverterApplication.CATEGORY_CONVERTER); |
- |
- PackageManager pm = this.getPackageManager(); |
- List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0); |
- |
- if (null == list) |
- { |
- return myData; |
- } |
- |
- String[] prefixPath; |
- |
- if (prefix.equals("")) //$NON-NLS-1$ |
- { |
- prefixPath = null; |
- } |
- else |
- { |
- prefixPath = prefix.split("/"); //$NON-NLS-1$ |
- } |
- |
- int len = list.size(); |
- |
- Map<String, Boolean> entries = new HashMap<String, Boolean>(); |
- |
- for (int i = 0; i < len; i++) |
- { |
- ResolveInfo info = list.get(i); |
- CharSequence labelSeq = info.loadLabel(pm); |
- String label = labelSeq != null |
- ? labelSeq.toString() |
- : info.activityInfo.name; |
- |
- if (prefix.length() == 0 || label.startsWith(prefix)) |
- { |
- |
- String[] labelPath = label.split("/"); //$NON-NLS-1$ |
- |
- String nextLabel = |
- prefixPath == null ? labelPath[0] : labelPath[prefixPath.length]; |
- |
- if ((prefixPath != null ? prefixPath.length : 0) == labelPath.length - 1) |
- { |
- this.addItem(myData, nextLabel, this.activityIntent( |
- info.activityInfo.applicationInfo.packageName, |
- info.activityInfo.name)); |
- } |
- else |
- { |
- if (entries.get(nextLabel) == null) |
- { |
- this.addItem( |
- myData, |
- nextLabel, |
- this.browseIntent(prefix.equals("") ? nextLabel : prefix + "/" //$NON-NLS-1$//$NON-NLS-2$ |
- + nextLabel)); |
- entries.put(nextLabel, true); |
- } |
- } |
- } |
- } |
- |
- Collections.sort(myData, MenuActivity.sDisplayNameComparator); |
- |
- return myData; |
- } |
- |
- private final static Comparator<Map> sDisplayNameComparator = |
- new Comparator<Map>() { |
- private final Collator collator = Collator.getInstance(); |
- |
- public int compare(Map map1, Map map2) |
- { |
- return this.collator.compare(map1.get("title"), map2.get("title")); //$NON-NLS-1$ //$NON-NLS-2$ |
- } |
- }; |
- |
- /** |
- * @param pkg |
- * @param componentName |
- * @return |
- */ |
- protected Intent activityIntent(String pkg, String componentName) |
- { |
- Intent result = new Intent(); |
- result.setClassName(pkg, componentName); |
- return result; |
- } |
- |
- /** |
- * @param path |
- * @return |
- */ |
- protected Intent browseIntent(String path) |
- { |
- Intent result = new Intent(); |
- result.setClass(this, MenuActivity.class); |
- result.putExtra("de.pointedears.converter.Path", path); //$NON-NLS-1$ |
- return result; |
- } |
- |
- /** |
- * @param data |
- * @param name |
- * @param intent |
- */ |
- protected void addItem(List<Map> data, String name, Intent intent) |
- { |
- Map<String, Object> temp = new HashMap<String, Object>(); |
- temp.put("title", name); //$NON-NLS-1$ |
- temp.put("intent", intent); //$NON-NLS-1$ |
- data.add(temp); |
- } |
- |
- /* |
- * (non-Javadoc) |
- * |
- * @see android.app.ListActivity#onListItemClick(android.widget.ListView, |
- * android.view.View, int, long) |
- */ |
- @Override |
- protected void onListItemClick(ListView l, View v, int position, long id) |
- { |
- Map map = (Map) l.getItemAtPosition(position); |
- |
- Intent intent = (Intent) map.get("intent"); //$NON-NLS-1$ |
- this.startActivity(intent); |
- } |
- |
-} |
/src/de/pointedears/converter/MenuActivity.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/helpers/ConverterThread.java |
=================================================================== |
--- src/de/pointedears/converter/helpers/ConverterThread.java (revision 20) |
+++ src/de/pointedears/converter/helpers/ConverterThread.java (nonexistent) |
@@ -1,30 +0,0 @@ |
-package de.pointedears.converter.helpers; |
- |
-import android.os.Handler; |
- |
-/** |
- * General thread to perform background tasks |
- * |
- * @author pelinux |
- */ |
-public class ConverterThread extends Thread |
-{ |
- private Handler handler = null; |
- private Runnable runnable = null; |
- |
- /** |
- * @param runnable |
- * @param handler |
- */ |
- public ConverterThread(Runnable runnable, Handler handler) |
- { |
- this.handler = handler; |
- this.runnable = runnable; |
- } |
- |
- @Override |
- public void run() |
- { |
- this.handler.post(this.runnable); |
- } |
-} |
/src/de/pointedears/converter/helpers/ConverterThread.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/helpers/Notifier.java |
=================================================================== |
--- src/de/pointedears/converter/helpers/Notifier.java (revision 20) |
+++ src/de/pointedears/converter/helpers/Notifier.java (nonexistent) |
@@ -1,96 +0,0 @@ |
-/** |
- * A simple notifier for Activities, encapsulating all the work necessary |
- * to send a notification message on Android. |
- */ |
-package de.pointedears.converter.helpers; |
- |
-import android.app.Activity; |
-import android.app.Notification; |
-import android.app.NotificationManager; |
-import android.app.PendingIntent; |
-import android.content.Context; |
-import android.content.Intent; |
-import de.pointedears.converter.R; |
-import de.pointedears.converter.R.drawable; |
- |
-/** |
- * Sends notification messages for {@link Activity Activities} |
- * |
- * @author Thomas 'PointedEars' Lahn |
- */ |
-public class Notifier |
-{ |
- private static int nextId = 1; |
- |
- /** |
- * |
- */ |
- public Context activityContext; |
- |
- /** |
- * @param activityContext |
- * The activity for which a notification will be sent. This |
- * allows the user to select the notification and go back |
- * directly to the activity that issued it. |
- * @param tickerText |
- * The text to be displayed as notification, both as ticker message |
- * and in the notification list. |
- * @param notificationTitle |
- * The title for the notification message. The default ( |
- * <code>null</code>) |
- * is the application name (R.strings.app_name). |
- * @see Notifier#sendMessage(Context, CharSequence) |
- */ |
- public static void sendMessage(Context activityContext, |
- CharSequence tickerText, CharSequence notificationTitle) |
- { |
- NotificationManager mNotificationManager = |
- (NotificationManager) activityContext |
- .getSystemService(Context.NOTIFICATION_SERVICE); |
- |
- Notification notification = |
- new Notification(drawable.icon, tickerText, System.currentTimeMillis()); |
- |
- Context applicationContext = |
- activityContext.getApplicationContext(); |
- |
- Intent notificationIntent = |
- new Intent(activityContext, activityContext.getClass()); |
- |
- PendingIntent contentIntent = |
- PendingIntent.getActivity(activityContext, 0, |
- notificationIntent, 0); |
- |
- if (notificationTitle == null) |
- { |
- notificationTitle = activityContext.getString(R.string.app_name); |
- } |
- |
- CharSequence contentTitle = notificationTitle; |
- CharSequence contentText = tickerText; |
- |
- notification.setLatestEventInfo(applicationContext, contentTitle, |
- contentText, |
- contentIntent); |
- |
- mNotificationManager.notify(Notifier.nextId, notification); |
- ++Notifier.nextId; |
- } |
- |
- /** |
- * Sends a notification message where the the application name |
- * (R.strings.app_name) |
- * is used as message title. |
- * |
- * @param activityContext |
- * The activity for which a notification will be sent |
- * @param tickerText |
- * The text to be displayed as notification |
- * @see Notifier#sendMessage(Context, CharSequence, CharSequence) |
- */ |
- public static void sendMessage(Context activityContext, |
- CharSequence tickerText) |
- { |
- Notifier.sendMessage(activityContext, tickerText, null); |
- } |
-} |
\ No newline at end of file |
/src/de/pointedears/converter/helpers/Notifier.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/helpers/UpdateService.java |
=================================================================== |
--- src/de/pointedears/converter/helpers/UpdateService.java (revision 20) |
+++ src/de/pointedears/converter/helpers/UpdateService.java (nonexistent) |
@@ -1,137 +0,0 @@ |
-package de.pointedears.converter.helpers; |
- |
-import android.app.Service; |
-import android.content.Intent; |
-import android.os.Handler; |
-import android.os.IBinder; |
-import de.pointedears.converter.app.CurrenciesActivity; |
-import de.pointedears.converter.net.RatesUpdater; |
- |
-/** |
- * Update service to run a thread to update currency rates |
- * |
- * @author Thomas 'PointedEars' Lahn |
- */ |
-public class UpdateService extends Service |
-{ |
- private ConverterThread updateThread; |
- private Handler handler; |
- private RatesUpdater ratesUpdater; |
- |
- public static final String ACTION_UPDATE = |
- "de.pointedears.converter.ACTION_UPDATE"; //$NON-NLS-1$ |
- public static final String EXTRA_ACTIVITY = |
- "de.pointedears.converter.extra_activity"; //$NON-NLS-1$ |
- public static final String EXTRA_NUM_RATES = |
- "de.pointedears.converter.extra_num_rates"; //$NON-NLS-1$ |
- public static final String EXTRA_DATE = "de.pointedears.converter.extra_date"; //$NON-NLS-1$ |
- |
- /* NOTE: Don't remove; may be used later for automated updates */ |
- // private sendTimerTask sendTime = null; |
- |
- // /** inner class implements the broadcast timer */ |
- // private class BroadcastTimerTask extends TimerTask |
- // { |
- // int counter = 0; |
- // |
- // @Override |
- // public void run() |
- // { |
- // Intent intent = new Intent(UpdateService.ACTION_UPDATE); |
- // String theTime = |
- // "Time: " + System.currentTimeMillis() + ", Counter = " |
- // + Integer.toString(this.counter); |
- // this.counter++; |
- // intent.putExtra("TIME", theTime); |
- // UpdateService.this.sendBroadcast(intent); |
- // } |
- // }; |
- |
- @Override |
- public IBinder onBind(Intent intent) |
- { |
- /* NOTE: Clients cannot bind to this service */ |
- return null; |
- } |
- |
- @Override |
- public void onCreate() |
- { |
- super.onCreate(); |
- // this.myTimer = new Timer("myTimer"); |
- |
- if (this.handler == null) |
- { |
- this.handler = new Handler(); |
- } |
- |
- this.updateThread = null; |
- } |
- |
- // /* |
- // * (non-Javadoc) |
- // * |
- // * @see android.app.Service#onStartCommand(android.content.Intent, int, int) |
- // */ |
- // @Override |
- // public int onStartCommand(Intent intent, int flags, int startId) |
- // { |
- // // TODO Auto-generated method stub |
- // return super.onStartCommand(intent, flags, startId); |
- // } |
- |
- @Override |
- /** |
- * @deprecated since SDK 2.0 |
- */ |
- public void onStart(Intent intent, int startId) |
- { |
- super.onStart(intent, startId); |
- // this.myTimer.cancel(); |
- // this.myTimer = new Timer("myTimer"); |
- // this.sendTime = new BroadcastTimerTask(); |
- // this.myTimer.scheduleAtFixedRate(this.sendTime, 0, 1000 * 5); |
- |
- String action = intent.getAction(); |
- if (UpdateService.ACTION_UPDATE.equals(action)) |
- { |
- if (this.updateThread == null) |
- { |
- this.ratesUpdater = new RatesUpdater(this); |
- this.updateThread = |
- new ConverterThread(this.ratesUpdater, this.handler); |
- this.ratesUpdater.setUpdateThread(this.updateThread); |
- } |
- |
- try |
- { |
- this.updateThread.start(); |
- // this.editValue1.setText("Gestartet!"); |
- } |
- catch (IllegalThreadStateException e) |
- { |
- // this.editValue1.setText("Bereits gestartet!"); |
- } |
- |
- // case R.id.item_options_quit: |
- // if (this.updateThread != null) |
- // { |
- // try |
- // { |
- // this.updateThread.join(); |
- // } |
- // catch (InterruptedException e) |
- // { |
- // // TODO Auto-generated catch block |
- // } |
- // |
- // // this.editValue1.setText("Gestoppt -> Warten auf Start"); |
- // } |
- // else |
- // { |
- // // this.editValue1.setText("Bereits gestoppt -> Warten auf Start"); |
- // } |
- // return true; |
- } |
- } |
-} |
/src/de/pointedears/converter/helpers/UpdateService.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/helpers/ConverterNamespaceContext.java |
=================================================================== |
--- src/de/pointedears/converter/helpers/ConverterNamespaceContext.java (revision 20) |
+++ src/de/pointedears/converter/helpers/ConverterNamespaceContext.java (nonexistent) |
@@ -1,58 +0,0 @@ |
-package de.pointedears.converter.helpers; |
- |
-import java.util.HashMap; |
-import java.util.Iterator; |
- |
-import javax.xml.XMLConstants; |
-import javax.xml.namespace.NamespaceContext; |
- |
-/** |
- * @author pelinux |
- * |
- */ |
-public final class ConverterNamespaceContext implements NamespaceContext |
-{ |
- private final HashMap<String, String> namespaces = |
- new HashMap<String, String>(); |
- |
- public void add(String prefix, String uri) |
- { |
- this.namespaces.put(prefix, uri); |
- } |
- |
- @Override |
- public Iterator getPrefixes(String namespaceURI) |
- { |
- throw new UnsupportedOperationException(); |
- } |
- |
- @Override |
- public String getPrefix(String namespaceURI) |
- { |
- throw new UnsupportedOperationException(); |
- } |
- |
- @Override |
- public String getNamespaceURI(String prefix) |
- { |
- if (prefix == null) |
- { |
- throw new NullPointerException("Null prefix"); |
- } |
- else |
- { |
- if ("xml".equals(prefix)) |
- { |
- return XMLConstants.XML_NS_URI; |
- } |
- |
- String storedPrefix = this.namespaces.get(prefix); |
- if (storedPrefix != null) |
- { |
- return storedPrefix; |
- } |
- |
- return XMLConstants.NULL_NS_URI; |
- } |
- } |
-} |
\ No newline at end of file |
/src/de/pointedears/converter/helpers/ConverterNamespaceContext.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/db/ConversionData.java |
=================================================================== |
--- src/de/pointedears/converter/db/ConversionData.java (revision 20) |
+++ src/de/pointedears/converter/db/ConversionData.java (nonexistent) |
@@ -1,60 +0,0 @@ |
-package de.pointedears.converter.db; |
- |
-import java.util.Date; |
- |
-/** |
- * Stores conversion data for a currency |
- * |
- * @author pelinux |
- */ |
-public class ConversionData |
-{ |
- private double rate; |
- private Date updated; |
- |
- /** |
- * @param rate |
- * 1 EUR equals this value in a currency |
- * @param updated |
- * Date that the rate was updated |
- */ |
- public ConversionData(Double rate, Date updated) |
- { |
- this.setRate(rate); |
- this.setUpdated(updated); |
- } |
- |
- /** |
- * @return the rate |
- */ |
- public Double getRate() |
- { |
- return this.rate; |
- } |
- |
- /** |
- * @param rate |
- * the rate to set |
- */ |
- public void setRate(Double rate) |
- { |
- this.rate = rate; |
- } |
- |
- /** |
- * @return the updated |
- */ |
- public Date getUpdated() |
- { |
- return this.updated; |
- } |
- |
- /** |
- * @param updated |
- * the updated to set |
- */ |
- public void setUpdated(Date updated) |
- { |
- this.updated = updated; |
- } |
-} |
\ No newline at end of file |
/src/de/pointedears/converter/db/ConversionData.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/db/CurrenciesDatabase.java |
=================================================================== |
--- src/de/pointedears/converter/db/CurrenciesDatabase.java (revision 20) |
+++ src/de/pointedears/converter/db/CurrenciesDatabase.java (nonexistent) |
@@ -1,235 +0,0 @@ |
-/** |
- * |
- */ |
-package de.pointedears.converter.db; |
- |
-import java.text.DateFormat; |
-import java.text.ParseException; |
-import java.text.SimpleDateFormat; |
-import java.util.Date; |
-import java.util.HashMap; |
-import java.util.Map.Entry; |
- |
-import android.content.ContentValues; |
-import android.content.Context; |
-import android.database.Cursor; |
-import android.database.sqlite.SQLiteDatabase; |
-import android.database.sqlite.SQLiteException; |
-import android.database.sqlite.SQLiteOpenHelper; |
-import android.util.Log; |
-import de.pointedears.converter.app.CurrenciesActivity; |
- |
-/** |
- * @author pelinux |
- * |
- */ |
-public class CurrenciesDatabase extends SQLiteOpenHelper |
-{ |
- |
- private static final String DATABASE_NAME = "currency.db"; //$NON-NLS-1$ |
- private static final int DATABASE_VERSION = 8; |
- |
- private static final String TABLE = "currency"; //$NON-NLS-1$ |
- private static final String COLUMN_CURRENCY = "currency1"; //$NON-NLS-1$ |
- private static final String COLUMN_FACTOR = "factor"; //$NON-NLS-1$ |
- private static final String COLUMN_UPDATED = "updated"; //$NON-NLS-1$ |
- |
- private static HashMap<String, ConversionData> conversionRates = |
- new HashMap<String, ConversionData>(); |
- static |
- { |
- /* Default conversion rates from Euro (EUR) to other currencies */ |
- Date epoch = new Date(0); |
- CurrenciesDatabase.conversionRates |
- .put(CurrenciesActivity.VALUE_CHF, |
- new ConversionData(1.3013, epoch)); |
- CurrenciesDatabase.conversionRates |
- .put(CurrenciesActivity.VALUE_USD, |
- new ConversionData(1.3521, epoch)); |
- } |
- |
- private SQLiteDatabase database; |
- private final DateFormat iso8601format = new SimpleDateFormat( |
- "yyyy-MM-dd HH:mm:ss"); |
- |
- /** |
- * @param context |
- * The Activity in which this wrapper is used |
- */ |
- public CurrenciesDatabase(Context context) |
- { |
- super(context, CurrenciesDatabase.DATABASE_NAME, null, |
- CurrenciesDatabase.DATABASE_VERSION); |
- this.readConversionsFromDatabase(); |
- } |
- |
- /* |
- * (non-Javadoc) |
- * |
- * @see |
- * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite |
- * .SQLiteDatabase) |
- */ |
- @SuppressWarnings("nls") |
- @Override |
- public void onCreate(SQLiteDatabase db) |
- { |
- db.execSQL("CREATE TABLE IF NOT EXISTS " + CurrenciesDatabase.TABLE |
- + " (" + CurrenciesDatabase.COLUMN_CURRENCY + " TEXT" |
- + ", " + CurrenciesDatabase.COLUMN_FACTOR + " NUMERIC" |
- + ", " + CurrenciesDatabase.COLUMN_UPDATED |
- + " TEXT" |
- + ", CONSTRAINT unique_currency_pair UNIQUE (" |
- + CurrenciesDatabase.COLUMN_CURRENCY + ") ON CONFLICT REPLACE)"); |
- |
- this.writeConversionsToDatabase(db); |
- } |
- |
- /** |
- * @param db |
- * The database; <code>null</code> uses the default database |
- */ |
- public void writeConversionsToDatabase(SQLiteDatabase db) |
- { |
- HashMap<String, ConversionData> currencyConversions = |
- this.getConversionRates(); |
- |
- if (db == null) |
- { |
- db = this.database; |
- } |
- |
- if (!db.isOpen()) |
- { |
- try |
- { |
- db = this.getWritableDatabase(); |
- } |
- catch (SQLiteException e) |
- { |
- Log.e(this.getClass().toString(), "Could not open database", e); |
- throw e; |
- } |
- } |
- |
- if (db.isOpen()) |
- { |
- for (Entry<String, ConversionData> factorEntry : currencyConversions |
- .entrySet()) |
- { |
- ContentValues values = new ContentValues(); |
- values.put(CurrenciesDatabase.COLUMN_CURRENCY, factorEntry.getKey()); |
- values.put(CurrenciesDatabase.COLUMN_FACTOR, factorEntry.getValue() |
- .getRate()); |
- values.put(CurrenciesDatabase.COLUMN_UPDATED, |
- this.iso8601format.format(factorEntry.getValue() |
- .getUpdated())); |
- |
- /* INSERT suffices here, thanks to ON CONFLICT REPLACE */ |
- db.insert(CurrenciesDatabase.TABLE, |
- CurrenciesDatabase.COLUMN_FACTOR, |
- values); |
- } |
- } |
- } |
- |
- /* |
- * (non-Javadoc) |
- * |
- * @see |
- * android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite |
- * .SQLiteDatabase, int, int) |
- */ |
- @SuppressWarnings("nls") |
- @Override |
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) |
- { |
- /* NOTE: We should migrate an existing database instead */ |
- db.execSQL("DROP TABLE IF EXISTS " + CurrenciesDatabase.TABLE); |
- this.onCreate(db); |
- } |
- |
- /** |
- * @return |
- */ |
- public HashMap<String, ConversionData> getConversionRates() |
- { |
- return CurrenciesDatabase.conversionRates; |
- } |
- |
- /** |
- * Reads currency conversions and updates the static currencyConversions field |
- * of this class |
- */ |
- public void readConversionsFromDatabase() |
- { |
- try |
- { |
- /* Get database connection, but upgrade database first if necessary! */ |
- this.database = this.getWritableDatabase(); |
- |
- Cursor cursor = |
- this.database.query(true, CurrenciesDatabase.TABLE, null, null, null, |
- null, null, CurrenciesDatabase.COLUMN_CURRENCY, null); |
- |
- if (cursor != null) |
- { |
- try |
- { |
- int currency1Id = |
- cursor |
- .getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_CURRENCY); |
- int factorId = |
- cursor.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_FACTOR); |
- int updatedId = |
- cursor.getColumnIndexOrThrow(CurrenciesDatabase.COLUMN_UPDATED); |
- |
- /* NOTE: Don't change the default values if the table is empty */ |
- if (cursor.moveToFirst()) |
- { |
- HashMap<String, ConversionData> newCurrencyConversions = |
- new HashMap<String, ConversionData>(); |
- |
- do |
- { |
- String currencyStr = cursor.getString(currency1Id); |
- Double factor = cursor.getDouble(factorId); |
- String updatedStr = cursor.getString(updatedId); |
- |
- Date updated = new Date(0); |
- try |
- { |
- if (updatedStr != null) |
- { |
- updated = this.iso8601format.parse(updatedStr); |
- } |
- } |
- catch (ParseException e) |
- { |
- Log.e(this.getClass().toString(), |
- "Parsing ISO8601 datetime failed: '" + updatedStr + "'", e); |
- } |
- |
- newCurrencyConversions.put(currencyStr, new ConversionData( |
- factor, updated)); |
- } |
- while (cursor.moveToNext()); |
- |
- CurrenciesDatabase.conversionRates = newCurrencyConversions; |
- } |
- } |
- catch (IllegalArgumentException e) |
- { |
- Log.e(this.getClass().toString(), "Could not retrieve column index", |
- e); |
- } |
- } |
- |
- this.database.close(); |
- } |
- catch (SQLiteException e1) |
- { |
- Log.e(this.getClass().toString(), "Could not open database", e1); |
- } |
- } |
-} |
/src/de/pointedears/converter/db/CurrenciesDatabase.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/net/RatesUpdater.java |
=================================================================== |
--- src/de/pointedears/converter/net/RatesUpdater.java (revision 20) |
+++ src/de/pointedears/converter/net/RatesUpdater.java (nonexistent) |
@@ -1,218 +0,0 @@ |
-/** |
- * |
- */ |
-package de.pointedears.converter.net; |
- |
-import java.io.IOException; |
-import java.text.DateFormat; |
-import java.text.ParseException; |
-import java.text.SimpleDateFormat; |
-import java.util.Date; |
-import java.util.HashMap; |
- |
-import javax.xml.parsers.DocumentBuilder; |
-import javax.xml.parsers.DocumentBuilderFactory; |
-import javax.xml.parsers.ParserConfigurationException; |
-import javax.xml.xpath.XPath; |
-import javax.xml.xpath.XPathConstants; |
-import javax.xml.xpath.XPathExpression; |
-import javax.xml.xpath.XPathExpressionException; |
-import javax.xml.xpath.XPathFactory; |
- |
-import org.w3c.dom.Document; |
-import org.w3c.dom.Element; |
-import org.w3c.dom.NodeList; |
-import org.xml.sax.SAXException; |
- |
-import android.content.Intent; |
-import android.util.Log; |
-import de.pointedears.converter.app.CurrenciesActivity; |
-import de.pointedears.converter.db.ConversionData; |
-import de.pointedears.converter.helpers.ConverterThread; |
-import de.pointedears.converter.helpers.UpdateService; |
- |
-/** |
- * @author pelinux |
- * |
- */ |
-public class RatesUpdater implements Runnable |
-{ |
- /* |
- * XML markup attributes |
- */ |
- private static final String ATTR_RATE = "rate"; //$NON-NLS-1$ |
- private static final String ATTR_CURRENCY = "currency"; //$NON-NLS-1$ |
- private static final String ATTR_TIME = "time"; //$NON-NLS-1$ |
- |
- private static final String URL_ECB = |
- "http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"; //$NON-NLS-1$ |
- |
- private ConverterThread updateThread = null; |
- |
- private final UpdateService service; |
- |
- /** |
- * @param activityContext |
- * The activityContext for this updater. |
- * FIXME: Required only for database access |
- * @param updateService |
- * The service that started this updater |
- */ |
- public RatesUpdater(UpdateService updateService) |
- { |
- this.service = updateService; |
- } |
- |
- /** |
- * @return the updateThread |
- */ |
- public ConverterThread getUpdateThread() |
- { |
- return this.updateThread; |
- } |
- |
- /** |
- * @param updateThread |
- * the thread that this updater is running in |
- */ |
- public void setUpdateThread(ConverterThread updateThread) |
- { |
- this.updateThread = updateThread; |
- } |
- |
- /* |
- * (non-Javadoc) |
- * |
- * @see java.lang.Runnable#run() |
- */ |
- @Override |
- public void run() |
- { |
- int len = 0; |
- DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); //$NON-NLS-1$ |
- Date updated = new Date(); |
- |
- if (this.getUpdateThread() != null) |
- { |
- // TextView textUpdating = |
- // (TextView) this.activityContext |
- // .findViewById(R.id.currencies_text_updating); |
- // textUpdating.setVisibility(View.VISIBLE); |
- |
- DocumentBuilderFactory documentBuilderFactory = |
- DocumentBuilderFactory.newInstance(); |
- documentBuilderFactory.setNamespaceAware(true); |
- DocumentBuilder builder; |
- try |
- { |
- builder = documentBuilderFactory.newDocumentBuilder(); |
- Document doc; |
- try |
- { |
- doc = builder.parse(RatesUpdater.URL_ECB); |
- XPathFactory xpathFactory = XPathFactory.newInstance(); |
- XPath xpath = xpathFactory.newXPath(); |
- // NamespaceContextHelper namespaceContext = |
- // new NamespaceContextHelper(); |
- // namespaceContext.add("gesmes", |
- // "http://www.gesmes.org/xml/2002-08-01"); |
- // xpath.setNamespaceContext(namespaceContext); |
- |
- try |
- { |
- /* |
- * FIXME: Why doesn't a simple "./Cube/Cube/Cube" work even with a |
- * namespace resolver? |
- */ |
- @SuppressWarnings("nls") |
- XPathExpression expr = |
- xpath |
- .compile("./*[local-name() = 'Cube']/*[local-name() = 'Cube']"); |
- NodeList nodes = (NodeList) |
- expr.evaluate(doc.getDocumentElement(), XPathConstants.NODESET); |
- Element parentCube = (Element) nodes.item(0); |
- if (parentCube == null) |
- { |
- return; |
- } |
- |
- try |
- { |
- updated = |
- df.parse(parentCube.getAttribute(RatesUpdater.ATTR_TIME)); |
- } |
- catch (ParseException e) |
- { |
- Log.e(this.getClass().toString(), |
- "Could not parse the `time' attribute into a Date", e); //$NON-NLS-1$ |
- } |
- |
- expr = |
- xpath |
- .compile("./*[local-name()='Cube' and (@currency='CHF' or @currency='USD')]"); //$NON-NLS-1$ |
- nodes = |
- (NodeList) expr.evaluate(parentCube, XPathConstants.NODESET); |
- NodeList childCubes = nodes; |
- |
- len = childCubes.getLength(); |
- |
- HashMap<String, ConversionData> conversionRates = |
- CurrenciesActivity.getConversionRates(); |
- for (int i = 0; i < len; ++i) |
- { |
- Element item = (Element) childCubes.item(i); |
- String currency = item.getAttribute(RatesUpdater.ATTR_CURRENCY); |
- |
- try |
- { |
- Double rate = |
- Double.parseDouble(item.getAttribute(RatesUpdater.ATTR_RATE)); |
- conversionRates |
- .put(currency, new ConversionData(rate, updated)); |
- } |
- catch (NumberFormatException e) |
- { |
- |
- } |
- } |
- |
- CurrenciesActivity.getDatabase().writeConversionsToDatabase(null); |
- } |
- catch (XPathExpressionException e) |
- { |
- Log.e(this.getClass().toString(), "Error in XPath expression", e); //$NON-NLS-1$ |
- } |
- } |
- catch (SAXException e) |
- { |
- Log.e(this.getClass().toString(), |
- "Exception while parsing external XML resource", e); //$NON-NLS-1$ |
- } |
- catch (IOException e) |
- { |
- Log.e(this.getClass().toString(), |
- "I/O exception while parsing external XML resource", e); //$NON-NLS-1$ |
- } |
- } |
- catch (ParserConfigurationException e) |
- { |
- Log.e(this.getClass().toString(), |
- "Document builder cannot be created", e); //$NON-NLS-1$ |
- } |
- |
- if (len > 0) |
- { |
- /* |
- * Notify the activity that we are done (causes a notification to be |
- * shown) |
- */ |
- Intent intent = new Intent(UpdateService.ACTION_UPDATE); |
- intent.putExtra(UpdateService.EXTRA_NUM_RATES, len); |
- intent.putExtra(UpdateService.EXTRA_DATE, updated); |
- this.service.sendBroadcast(intent); |
- } |
- |
- // textUpdating.setVisibility(View.GONE); |
- } |
- } |
-} |
/src/de/pointedears/converter/net/RatesUpdater.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: src/de/pointedears/converter/ConverterApplication.java |
=================================================================== |
--- src/de/pointedears/converter/ConverterApplication.java (revision 20) |
+++ src/de/pointedears/converter/ConverterApplication.java (nonexistent) |
@@ -1,51 +0,0 @@ |
-/* |
- * Copyright (C) 2010 Thomas Lahn |
- */ |
- |
-package de.pointedears.converter; |
- |
-import android.app.Application; |
-import android.content.Intent; |
-import de.pointedears.converter.helpers.UpdateService; |
- |
-/** |
- * Converter application class. Holds the intent category for building |
- * the list menu. Might later initialize prefs. |
- * |
- * @author Thomas 'PointedEars' Lahn |
- */ |
-public class ConverterApplication extends Application |
-{ |
- /** |
- * Activity category for automatically filtering converter Activities |
- */ |
- public final static String CATEGORY_CONVERTER = |
- "android.intent.category.CONVERTER"; //$NON-NLS-1$ |
- |
- /* |
- * (non-Javadoc) |
- * |
- * @see android.app.Application#onCreate() |
- */ |
- @Override |
- public void onCreate() |
- { |
- this.startService(new Intent(this, UpdateService.class)); |
- |
- /* |
- * This populates the default values from the preferences XML file. See |
- * {@link DefaultValues} for more details. |
- */ |
- // PreferenceManager.setDefaultValues(this, R.xml.default_values, false); |
- } |
- |
- /* |
- * (non-Javadoc) |
- * |
- * @see android.app.Application#onTerminate() |
- */ |
- @Override |
- public void onTerminate() |
- { |
- } |
-} |
/src/de/pointedears/converter/ConverterApplication.java |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: AndroidManifest.xml |
=================================================================== |
--- AndroidManifest.xml (revision 20) |
+++ AndroidManifest.xml (nonexistent) |
@@ -1,52 +0,0 @@ |
-<?xml version="1.0" encoding="utf-8"?> |
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
- package="de.pointedears.converter" android:versionName="0.9.1" android:versionCode="17"> |
- |
- <uses-sdk android:minSdkVersion="8" /> |
- <uses-permission android:name="android.permission.VIBRATE" /> |
- <uses-permission android:name="android.permission.INTERNET" /> |
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |
- |
- <application android:name="ConverterApplication" |
- android:label="@string/app_name" android:icon="@drawable/icon" |
- android:debuggable="true"> |
- |
- <activity android:name="MenuActivity" android:label="@string/app_name"> |
- <intent-filter> |
- <action android:name="android.intent.action.MAIN" /> |
- <category android:name="android.intent.category.DEFAULT" /> |
- <category android:name="android.intent.category.LAUNCHER" /> |
- </intent-filter> |
- </activity> |
- |
- <activity android:name=".app.LengthsActivity" |
- android:label="@string/activity_lengths"> |
- <intent-filter> |
- <action android:name="android.intent.action.MAIN" /> |
- <category android:name="android.intent.category.CONVERTER" /> |
- </intent-filter> |
- </activity> |
- |
- <activity android:name=".app.TemperaturesActivity" |
- android:label="@string/activity_temperatures"> |
- <intent-filter> |
- <action android:name="android.intent.action.MAIN" /> |
- <category android:name="android.intent.category.CONVERTER" /> |
- </intent-filter> |
- </activity> |
- |
- <activity android:name=".app.CurrenciesActivity" |
- android:label="@string/activity_currencies"> |
- <intent-filter> |
- <action android:name="android.intent.action.MAIN" /> |
- <category android:name="android.intent.category.CONVERTER" /> |
- </intent-filter> |
- </activity> |
- |
- <service android:enabled="true" android:name=".helpers.UpdateService"> |
- <intent-filter> |
- <category android:name="android.intent.category.LAUNCHER" /> |
- </intent-filter> |
- </service> |
- </application> |
-</manifest> |
\ No newline at end of file |
/AndroidManifest.xml |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: bin/resources.ap_ |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/bin/resources.ap_ |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: bin/classes.dex |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/bin/classes.dex |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: bin/Converter.apk |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/bin/Converter.apk |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: res/drawable-ldpi/icon.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/res/drawable-ldpi/icon.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: res/drawable-mdpi/icon.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/res/drawable-mdpi/icon.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: res/layout/main.xml |
=================================================================== |
--- res/layout/main.xml (revision 20) |
+++ res/layout/main.xml (nonexistent) |
@@ -1,20 +0,0 @@ |
-<?xml version="1.0" encoding="utf-8"?> |
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
- android:orientation="vertical" |
- android:layout_width="fill_parent" |
- android:layout_height="fill_parent" |
- > |
- |
- <TextView |
- android:layout_width="fill_parent" |
- android:layout_height="wrap_content" |
- android:text="@string/title" |
- /> |
- |
- <ListView android:id="@id/android:list" |
- android:background="#00FF00" |
- android:layout_weight="1" |
- android:drawSelectorOnTop="false" |
- /> |
- |
-</LinearLayout> |
/res/layout/main.xml |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: res/layout/activity_temperatures.xml |
=================================================================== |
--- res/layout/activity_temperatures.xml (revision 20) |
+++ res/layout/activity_temperatures.xml (nonexistent) |
@@ -1,43 +0,0 @@ |
-<?xml version="1.0" encoding="utf-8"?> |
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
- android:orientation="vertical" android:layout_height="match_parent" |
- android:layout_width="match_parent"> |
- |
- <LinearLayout android:orientation="horizontal" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_marginTop="10sp"> |
- <EditText android:id="@+id/temperatures_edit_value1" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:inputType="numberSigned|numberDecimal" /> |
- <TextView android:text="=" android:minWidth="10sp" |
- android:layout_width="wrap_content" android:layout_height="wrap_content" |
- android:gravity="center" android:textSize="25sp" /> |
- <EditText android:id="@+id/temperatures_edit_value2" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:inputType="numberSigned|numberDecimal" /> |
- </LinearLayout> |
- |
- <LinearLayout android:orientation="horizontal" |
- android:layout_width="match_parent" android:layout_height="wrap_content"> |
- <Spinner android:id="@+id/temperatures_spinner_unit1" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:drawSelectorOnTop="true" |
- android:entries="@array/temperature_units_display" |
- android:entryValues="@array/temperature_units_values" /> |
- <TextView android:minWidth="10sp" android:layout_width="wrap_content" |
- android:layout_height="wrap_content" /> |
- <Spinner android:id="@+id/temperatures_spinner_unit2" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:drawSelectorOnTop="true" |
- android:entries="@array/temperature_units_display" |
- android:entryValues="@array/temperature_units_values" /> |
- </LinearLayout> |
- |
- <TextView android:id="@+id/temperatures_text_off_scale" |
- android:text="@string/temperatures_off_scale" android:layout_width="wrap_content" |
- android:layout_height="wrap_content" android:visibility="invisible" /> |
- <Button android:text="@string/button_clear" android:id="@+id/temperatures_button_clear" |
- android:layout_height="wrap_content" android:layout_width="100sp" |
- android:layout_gravity="center_horizontal" /> |
- |
-</LinearLayout> |
/res/layout/activity_temperatures.xml |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: res/layout/activity_currencies.xml |
=================================================================== |
--- res/layout/activity_currencies.xml (revision 20) |
+++ res/layout/activity_currencies.xml (nonexistent) |
@@ -1,53 +0,0 @@ |
-<?xml version="1.0" encoding="utf-8"?> |
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
- android:orientation="vertical" android:layout_height="match_parent" |
- android:layout_width="match_parent"> |
- |
- <LinearLayout android:orientation="horizontal" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_marginTop="10sp"> |
- <EditText android:id="@+id/currencies_edit_value1" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:inputType="numberDecimal" /> |
- <TextView android:text="=" android:minWidth="10sp" |
- android:layout_width="wrap_content" android:layout_height="wrap_content" |
- android:gravity="center" android:textSize="25sp" /> |
- <EditText android:id="@+id/currencies_edit_value2" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:inputType="numberDecimal" /> |
- </LinearLayout> |
- <LinearLayout android:orientation="horizontal" |
- android:layout_width="match_parent" android:layout_height="wrap_content"> |
- <Spinner android:id="@+id/currencies_spinner_unit1" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:drawSelectorOnTop="true" |
- android:entries="@array/currency_units_display" |
- android:entryValues="@array/currency_units_values" /> |
- <TextView android:text="" android:layout_width="wrap_content" |
- android:layout_height="wrap_content" android:minWidth="10sp" /> |
- <Spinner android:id="@+id/currencies_spinner_unit2" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:drawSelectorOnTop="true" |
- android:entries="@array/currency_units_display" |
- android:entryValues="@array/currency_units_values" /> |
- </LinearLayout> |
- |
- <Button android:text="@string/button_clear" android:id="@+id/currencies_button_clear" |
- android:layout_height="wrap_content" android:layout_width="100sp" |
- android:layout_gravity="center_horizontal"></Button> |
- <TextView android:id="@+id/currencies_text_updating" |
- android:text="@string/currencies_updating" android:layout_height="wrap_content" |
- android:layout_width="match_parent" android:visibility="gone" /> |
- |
- <TableLayout android:id="@+id/currencies_table_rates" |
- android:layout_height="match_parent" android:layout_width="match_parent" |
- android:stretchColumns="*"> |
- <View android:layout_height="2dip" android:background="#FF909090" /> |
- <TableRow> |
- <TextView android:text="@string/currencies_currency" /> |
- <TextView android:text="@string/currencies_rate" /> |
- <TextView android:text="@string/currencies_updated" /> |
- </TableRow> |
- <View android:layout_height="1dip" android:background="#FF909090" /> |
- </TableLayout> |
-</LinearLayout> |
/res/layout/activity_currencies.xml |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: res/layout/activity_lengths.xml |
=================================================================== |
--- res/layout/activity_lengths.xml (revision 20) |
+++ res/layout/activity_lengths.xml (nonexistent) |
@@ -1,37 +0,0 @@ |
-<?xml version="1.0" encoding="utf-8"?> |
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
- android:orientation="vertical" android:layout_height="match_parent" |
- android:layout_width="match_parent"> |
- |
- <LinearLayout android:orientation="horizontal" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_marginTop="10sp"> |
- <EditText android:id="@+id/edit_value1" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:inputType="numberDecimal" /> |
- <TextView android:text="=" android:layout_width="wrap_content" |
- android:layout_height="wrap_content" android:minWidth="10sp" |
- android:gravity="center" android:textSize="25sp" /> |
- <EditText android:id="@+id/edit_value2" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:inputType="numberDecimal" /> |
- </LinearLayout> |
- |
- <LinearLayout android:orientation="horizontal" |
- android:layout_width="match_parent" android:layout_height="wrap_content"> |
- <Spinner android:id="@+id/spinner_unit1" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:drawSelectorOnTop="true" |
- android:entries="@array/length_units_display" android:entryValues="@array/length_units_values" /> |
- <TextView android:text="" android:layout_width="wrap_content" |
- android:layout_height="wrap_content" android:minWidth="10sp" /> |
- <Spinner android:id="@+id/spinner_unit2" |
- android:layout_width="match_parent" android:layout_height="wrap_content" |
- android:layout_weight="1" android:drawSelectorOnTop="true" |
- android:entries="@array/length_units_display" android:entryValues="@array/length_units_values" /> |
- </LinearLayout> |
- |
- <Button android:text="@string/button_clear" android:id="@+id/lengths_button_clear" |
- android:layout_height="wrap_content" android:layout_width="100sp" |
- android:layout_gravity="center_horizontal" /> |
-</LinearLayout> |
/res/layout/activity_lengths.xml |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: res/values/arrays.xml |
=================================================================== |
--- res/values/arrays.xml (revision 20) |
+++ res/values/arrays.xml (nonexistent) |
@@ -1,39 +0,0 @@ |
-<?xml version="1.0" encoding="utf-8"?> |
- |
-<resources> |
- <string-array name="length_units_display"> |
- <item>in (inch)</item> |
- <item>km (kilometer)</item> |
- <item>m (meter)</item> |
- <item>mi (mile)</item> |
- </string-array> |
- <string-array name="length_units_values"> |
- <!-- TODO: Must not be "in", why? --> |
- <item>inch</item> |
- <item>km</item> |
- <item>m</item> |
- <item>mi</item> |
- </string-array> |
- |
- <string-array name="temperature_units_display"> |
- <item>°C (Celsius)</item> |
- <item>°F (Fahrenheit)</item> |
- <item>K (Kelvin)</item> |
- </string-array> |
- <string-array name="temperature_units_values"> |
- <item>C</item> |
- <item>F</item> |
- <item>K</item> |
- </string-array> |
- |
- <string-array name="currency_units_display"> |
- <item>CHF</item> |
- <item>EUR</item> |
- <item>USD</item> |
- </string-array> |
- <string-array name="currency_units_values"> |
- <item>CHF</item> |
- <item>EUR</item> |
- <item>USD</item> |
- </string-array> |
-</resources> |
/res/values/arrays.xml |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: res/values/strings.xml |
=================================================================== |
--- res/values/strings.xml (revision 20) |
+++ res/values/strings.xml (nonexistent) |
@@ -1,26 +0,0 @@ |
-<?xml version="1.0" encoding="utf-8"?> |
-<resources> |
- <string name="app_name">Converter</string> |
- <string name="title">Android Unit Converter</string> |
- <string name="button_clear">Clear</string> |
- |
- <string name="activity_lengths">Lengths</string> |
- |
- <string name="activity_temperatures">Temperatures</string> |
- <string name="temperatures_off_scale"><sup>*</sup> Theoretical value off the scale</string> |
- |
- <string name="activity_currencies">Currencies</string> |
- <string name="currencies_CHF">CHF</string> |
- <string name="currencies_EUR">EUR</string> |
- <string name="currencies_USD">USD</string> |
- <string name="currencies_notification"> exchange rates updated to </string> |
- <string name="currencies_updating">Updating table rates ...</string> |
- <string name="currencies_currency"><b>Currency</b></string> |
- <string name="currencies_rate"><b>Rate (1 EUR)</b></string> |
- <string name="currencies_updated"><b>Updated</b></string> |
- <string name="currencies_never_updated"><b>Updated</b></string> |
- <string name="caption_update">Update exchange rates</string> |
- <string name="option_quit">Quit</string> |
- |
- <string name="activity_browser">Browser</string> |
-</resources> |
/res/values/strings.xml |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: res/xml/default_values_old.xml |
=================================================================== |
--- res/xml/default_values_old.xml (revision 20) |
+++ res/xml/default_values_old.xml (nonexistent) |
@@ -1,24 +0,0 @@ |
-<?xml version="1.0" encoding="utf-8"?> |
-<!-- Copyright (C) 2008 The Android Open Source Project |
- |
- Licensed under the Apache License, Version 2.0 (the "License"); |
- you may not use this file except in compliance with the License. |
- You may obtain a copy of the License at |
- |
- http://www.apache.org/licenses/LICENSE-2.0 |
- |
- Unless required by applicable law or agreed to in writing, software |
- distributed under the License is distributed on an "AS IS" BASIS, |
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
- See the License for the specific language governing permissions and |
- limitations under the License. |
---> |
- |
-<!-- This is a primitive example showing how to set default values for preferences. |
- See DefaultValues.java for more information. --> |
-<PreferenceScreen |
- xmlns:android="http://schemas.android.com/apk/res/android"> |
- |
- |
- |
-</PreferenceScreen> |
/res/xml/default_values_old.xml |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: res/drawable-hdpi/icon.png |
=================================================================== |
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/res/drawable-hdpi/icon.png |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-application/octet-stream |
\ No newline at end of property |
Index: res/menu/options.xml |
=================================================================== |
--- res/menu/options.xml (revision 20) |
+++ res/menu/options.xml (nonexistent) |
@@ -1,11 +0,0 @@ |
-<?xml version="1.0" encoding="utf-8"?> |
-<menu xmlns:android="http://schemas.android.com/apk/res/android"> |
-<!-- android:icon="@drawable/ic_new_game" --> |
- |
- <item android:id="@+id/item_options_update" |
- android:title="@string/caption_update" /> |
- |
-<!-- android:icon="@drawable/ic_quit" --> |
-<!-- <item android:id="@+id/item_options_quit" |
- android:title="@string/option_quit" /> --> |
-</menu> |
\ No newline at end of file |
/res/menu/options.xml |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |
Index: .classpath |
=================================================================== |
--- .classpath (revision 20) |
+++ .classpath (nonexistent) |
@@ -1,7 +0,0 @@ |
-<?xml version="1.0" encoding="UTF-8"?> |
-<classpath> |
- <classpathentry excluding="com/nwalsh/namespace/" kind="src" path="src"/> |
- <classpathentry kind="src" path="gen"/> |
- <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> |
- <classpathentry kind="output" path="bin"/> |
-</classpath> |
/.classpath |
Property changes: |
Deleted: svn:mime-type |
## -1 +0,0 ## |
-text/plain |
\ No newline at end of property |