Set tmpdir to application cache directory.

Otherwise File.createTempFile() uses /sdcard which most apps don't
have write access to.

Bug: 6347289
Change-Id: Ibde191a63e4dbb9b03437406f8c999f192bcfa21
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 1a46430b..b55ee26 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -3843,7 +3843,7 @@
         windowManager.endTrimMemory();        
     }
 
-    private void setupGraphicsSupport(LoadedApk info) {
+    private void setupGraphicsSupport(LoadedApk info, File cacheDir) {
         if (Process.isIsolated()) {
             // Isolated processes aren't going to do UI.
             return;
@@ -3855,11 +3855,8 @@
             // If there are several packages in this application we won't
             // initialize the graphics disk caches 
             if (packages != null && packages.length == 1) {
-                ContextImpl appContext = new ContextImpl();
-                appContext.init(info, null, this);
-
-                HardwareRenderer.setupDiskCache(appContext.getCacheDir());
-                RenderScript.setupDiskCache(appContext.getCacheDir());
+                HardwareRenderer.setupDiskCache(cacheDir);
+                RenderScript.setupDiskCache(cacheDir);
             }
         } catch (RemoteException e) {
             // Ignore
@@ -3925,8 +3922,15 @@
 
         data.info = getPackageInfoNoCheck(data.appInfo, data.compatInfo);
 
-        setupGraphicsSupport(data.info);        
-        
+        final ContextImpl appContext = new ContextImpl();
+        appContext.init(data.info, null, this);
+        final File cacheDir = appContext.getCacheDir();
+
+        // Provide a usable directory for temporary files
+        System.setProperty("java.io.tmpdir", cacheDir.getAbsolutePath());
+
+        setupGraphicsSupport(data.info, cacheDir);
+
         /**
          * For system applications on userdebug/eng builds, log stack
          * traces of disk and network access to dropbox for analysis.
@@ -4003,8 +4007,6 @@
         }
 
         if (data.instrumentationName != null) {
-            ContextImpl appContext = new ContextImpl();
-            appContext.init(data.info, null, this);
             InstrumentationInfo ii = null;
             try {
                 ii = appContext.getPackageManager().