Fix temporary directory path in Android.

We should use /data/misc/update_engine/tmp instead of /data/local/tmp.

Bug: 24478450
TEST=Delta update nolonger permission denied.

Change-Id: I9a8096e602320195d30147971def5145bd82d775
diff --git a/common/hardware_android.cc b/common/hardware_android.cc
index 4f06ff2..abfca44 100644
--- a/common/hardware_android.cc
+++ b/common/hardware_android.cc
@@ -21,16 +21,10 @@
 #include <cutils/properties.h>
 
 #include "update_engine/common/hardware.h"
+#include "update_engine/common/platform_constants.h"
 
 using std::string;
 
-namespace {
-
-// The stateful directory used by update_engine.
-const char kNonVolatileDirectory[] = "/data/misc/update_engine";
-
-}  // namespace
-
 namespace chromeos_update_engine {
 
 namespace hardware {
@@ -102,7 +96,7 @@
 }
 
 bool HardwareAndroid::GetNonVolatileDirectory(base::FilePath* path) const {
-  base::FilePath local_path(kNonVolatileDirectory);
+  base::FilePath local_path(constants::kNonVolatileDirectory);
   if (!base::PathExists(local_path)) {
     LOG(ERROR) << "Non-volatile directory not found: " << local_path.value();
     return false;
diff --git a/common/hardware_chromeos.cc b/common/hardware_chromeos.cc
index ae27e36..f93685d 100644
--- a/common/hardware_chromeos.cc
+++ b/common/hardware_chromeos.cc
@@ -29,6 +29,7 @@
 
 #include "update_engine/common/hardware.h"
 #include "update_engine/common/hwid_override.h"
+#include "update_engine/common/platform_constants.h"
 #include "update_engine/common/subprocess.h"
 #include "update_engine/common/utils.h"
 
@@ -49,10 +50,6 @@
 // a powerwash is performed.
 const char kPowerwashCountMarker[] = "powerwash_count";
 
-// The stateful directory used by update_engine. This directory is wiped during
-// powerwash.
-const char kNonVolatileDirectory[] = "/var/lib/update_engine";
-
 }  // namespace
 
 namespace chromeos_update_engine {
@@ -144,7 +141,7 @@
 }
 
 bool HardwareChromeOS::GetNonVolatileDirectory(base::FilePath* path) const {
-  *path = base::FilePath(kNonVolatileDirectory);
+  *path = base::FilePath(constants::kNonVolatileDirectory);
   return true;
 }
 
diff --git a/common/platform_constants.h b/common/platform_constants.h
index 8331064..d1786ff 100644
--- a/common/platform_constants.h
+++ b/common/platform_constants.h
@@ -47,6 +47,9 @@
 // response. Empty if not supported.
 extern const char kOmahaResponseDeadlineFile[];
 
+// The stateful directory used by update_engine.
+extern const char kNonVolatileDirectory[];
+
 }  // namespace constants
 }  // namespace chromeos_update_engine
 
diff --git a/common/platform_constants_android.cc b/common/platform_constants_android.cc
index b6084ac..f35d7ef 100644
--- a/common/platform_constants_android.cc
+++ b/common/platform_constants_android.cc
@@ -30,6 +30,7 @@
 const char kCACertificatesPath[] = "/system/etc/security/cacerts";
 // No deadline file API support on Android.
 const char kOmahaResponseDeadlineFile[] = "";
+const char kNonVolatileDirectory[] = "/data/misc/update_engine";
 
 }  // namespace constants
 }  // namespace chromeos_update_engine
diff --git a/common/platform_constants_chromeos.cc b/common/platform_constants_chromeos.cc
index 45ca309..d8587ca 100644
--- a/common/platform_constants_chromeos.cc
+++ b/common/platform_constants_chromeos.cc
@@ -30,6 +30,8 @@
 const char kCACertificatesPath[] = "/usr/share/chromeos-ca-certificates";
 const char kOmahaResponseDeadlineFile[] =
     "/tmp/update-check-response-deadline";
+// This directory is wiped during powerwash.
+const char kNonVolatileDirectory[] = "/var/lib/update_engine";
 
 }  // namespace constants
 }  // namespace chromeos_update_engine
diff --git a/common/utils.cc b/common/utils.cc
index cfd8db0..0796459 100644
--- a/common/utils.cc
+++ b/common/utils.cc
@@ -56,6 +56,7 @@
 
 #include "update_engine/common/clock_interface.h"
 #include "update_engine/common/constants.h"
+#include "update_engine/common/platform_constants.h"
 #include "update_engine/common/prefs_interface.h"
 #include "update_engine/common/subprocess.h"
 #include "update_engine/omaha_request_params.h"
@@ -141,7 +142,13 @@
   }
 
   base::FilePath temp_dir;
+#ifdef __ANDROID__
+  temp_dir = base::FilePath(constants::kNonVolatileDirectory).Append("tmp");
+  if (!base::PathExists(temp_dir))
+    TEST_AND_RETURN_FALSE(base::CreateDirectory(temp_dir));
+#else
   TEST_AND_RETURN_FALSE(base::GetTempDir(&temp_dir));
+#endif  // __ANDROID__
   *template_path = temp_dir.Append(path);
   return true;
 }