Fix device writer to write out XML decimals properly

Change-Id: I483f1e3dd02a1ac61a06707bcf33ca1c9bb6f034
diff --git a/apps/DeviceConfig/src/com/example/android/deviceconfig/ConfigGenerator.java b/apps/DeviceConfig/src/com/example/android/deviceconfig/ConfigGenerator.java
index bc2ca7f..3dbdfdb 100644
--- a/apps/DeviceConfig/src/com/example/android/deviceconfig/ConfigGenerator.java
+++ b/apps/DeviceConfig/src/com/example/android/deviceconfig/ConfigGenerator.java
@@ -46,6 +46,7 @@
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.List;
+import java.util.Locale;
 
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -219,7 +220,8 @@
             double xin = metrics.widthPixels / metrics.xdpi;
             double yin = metrics.heightPixels / metrics.ydpi;
             double diag = Math.sqrt(Math.pow(xin, 2) + Math.pow(yin, 2));
-            diagonalLength.appendChild(doc.createTextNode(String.format("%1$.2f", diag)));
+            diagonalLength.appendChild(doc.createTextNode(
+                  String.format(Locale.US, "%1$.2f", diag)));
 
             Element pixelDensity = doc.createElement(PREFIX + NODE_PIXEL_DENSITY);
             screen.appendChild(pixelDensity);
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/devices/DeviceWriter.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/devices/DeviceWriter.java
index d80f91e..11b1c6d 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/devices/DeviceWriter.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/devices/DeviceWriter.java
@@ -28,6 +28,7 @@
 import java.awt.Point;
 import java.io.OutputStream;
 import java.util.Collection;
+import java.util.Locale;
 
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -136,7 +137,7 @@
 
         addElement(doc, screen, DeviceSchema.NODE_SCREEN_SIZE, s.getSize().getResourceValue());
         addElement(doc, screen, DeviceSchema.NODE_DIAGONAL_LENGTH,
-                String.format("%.2f",s.getDiagonalLength()));
+                String.format(Locale.US, "%.2f",s.getDiagonalLength()));
         addElement(doc, screen, DeviceSchema.NODE_PIXEL_DENSITY,
                 s.getPixelDensity().getResourceValue());
         addElement(doc, screen, DeviceSchema.NODE_SCREEN_RATIO, s.getRatio().getResourceValue());
@@ -148,8 +149,10 @@
                 Integer.toString(s.getXDimension()));
         addElement(doc, dimensions, DeviceSchema.NODE_Y_DIMENSION,
                 Integer.toString(s.getYDimension()));
-        addElement(doc, screen, DeviceSchema.NODE_XDPI, String.format("%.2f", s.getXdpi()));
-        addElement(doc, screen, DeviceSchema.NODE_YDPI, String.format("%.2f", s.getYdpi()));
+        addElement(doc, screen, DeviceSchema.NODE_XDPI, String.format(Locale.US,
+                "%.2f", s.getXdpi()));
+        addElement(doc, screen, DeviceSchema.NODE_YDPI, String.format(Locale.US,
+                "%.2f", s.getYdpi()));
 
         Element touch = doc.createElement(PREFIX + DeviceSchema.NODE_TOUCH);
         screen.appendChild(touch);
diff --git a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/devices/DeviceWriterTest.java b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/devices/DeviceWriterTest.java
index 2b8474e..e8053be 100644
--- a/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/devices/DeviceWriterTest.java
+++ b/sdkmanager/libs/sdklib/tests/src/com/android/sdklib/devices/DeviceWriterTest.java
@@ -25,8 +25,10 @@
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
+@SuppressWarnings("javadoc")
 public class DeviceWriterTest extends TestCase {
 
     public void testWriteIsValid() throws Exception {
@@ -46,6 +48,25 @@
         }
     }
 
+    public void testLocale() throws Exception {
+        Locale prevLocale = Locale.getDefault();
+        try {
+            Locale.setDefault(Locale.FRANCE);
+            InputStream devicesFile =
+                DeviceSchemaTest.class.getResourceAsStream("devices.xml");
+            List<Device> devices = DeviceParser.parse(devicesFile);
+            assertEquals("Parsed devices contained an un expected number of devices",
+                    2, devices.size());
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            DeviceWriter.writeToXml(baos, devices);
+            String xml = baos.toString();
+            assertTrue(xml.contains(".00"));
+            assertFalse(xml.contains(",00"));
+        } finally {
+            Locale.setDefault(prevLocale);
+        }
+    }
+
     public void testApiLowerBound() throws Exception {
         Map<String, String> replacements = new HashMap<String, String>();
         replacements.put("api-level", "1-");