From e1d330a071a4574040e6f1147800b4b2c8864043 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Wed, 2 May 2012 13:46:21 -0700 Subject: [PATCH] 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 --- core/java/android/app/ActivityThread.java | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 1a46430bc830c..b55ee26a500b3 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -3843,7 +3843,7 @@ public final class ActivityThread { 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 @@ public final class ActivityThread { // 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 @@ public final class ActivityThread { 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 @@ public final class ActivityThread { } if (data.instrumentationName != null) { - ContextImpl appContext = new ContextImpl(); - appContext.init(data.info, null, this); InstrumentationInfo ii = null; try { ii = appContext.getPackageManager().