From 66c90cd2ae49c49da8aeda5ab1d86bd9b76434c7 Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Thu, 11 Oct 2012 16:08:25 +0900
Subject: [PATCH] Put temporary files under a separate directory.

Bug: 7328003
Change-Id: Ibe5278ea209d149f87fd08785c77b17e3859948e
---
 .../latin/BinaryDictionaryFileDumper.java            |  5 +++--
 .../inputmethod/latin/BinaryDictionaryGetter.java    | 12 ++++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index 46b363c10e..b0b65edb62 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -46,7 +46,7 @@ public final class BinaryDictionaryFileDumper {
     /**
      * The size of the temporary buffer to copy files.
      */
-    private static final int FILE_READ_BUFFER_SIZE = 1024;
+    private static final int FILE_READ_BUFFER_SIZE = 8192;
     // TODO: make the following data common with the native code
     private static final byte[] MAGIC_NUMBER_VERSION_1 =
             new byte[] { (byte)0x78, (byte)0xB1, (byte)0x00, (byte)0x00 };
@@ -149,7 +149,7 @@ public final class BinaryDictionaryFileDumper {
 
         final Uri.Builder wordListUriBuilder = getProviderUriBuilder(id);
         final String finalFileName = BinaryDictionaryGetter.getCacheFileName(id, locale, context);
-        final String tempFileName = finalFileName + ".tmp";
+        final String tempFileName = BinaryDictionaryGetter.getTempFileName(id, context);
 
         for (int mode = MODE_MIN; mode <= MODE_MAX; ++mode) {
             InputStream originalSourceStream = null;
@@ -287,6 +287,7 @@ public final class BinaryDictionaryFileDumper {
      * @param input the stream to be copied.
      * @param output an output stream to copy the data to.
      */
+    // TODO: make output a BufferedOutputStream
     private static void checkMagicAndCopyFileTo(final BufferedInputStream input,
             final FileOutputStream output) throws FileNotFoundException, IOException {
         // Check the magic number
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
index 201a10187f..c747dc6734 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
@@ -163,6 +163,18 @@ final class BinaryDictionaryGetter {
         return getCacheDirectoryForLocale(locale, context) + File.separator + fileName;
     }
 
+    /**
+     * Generates a unique temporary file name in the app cache directory.
+     *
+     * This is unique as long as it doesn't get called twice in the same millisecond by the same
+     * thread, which should be more than enough for our purposes.
+     */
+    public static String getTempFileName(String id, Context context) {
+        final String fileName = replaceFileNameDangerousCharacters(id);
+        return context.getCacheDir() + File.separator + fileName + "."
+                + Thread.currentThread().getId() + "." + System.currentTimeMillis();
+    }
+
     /**
      * Returns a file address from a resource, or null if it cannot be opened.
      */
-- 
GitLab