1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.support.resource; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.File; 213827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughesimport java.io.FileInputStream; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.FileNotFoundException; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.FileOutputStream; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 2691922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstromimport java.io.OutputStream; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.MalformedURLException; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.URL; 2991922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstromimport tests.support.Support_Configuration; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Support_Resources { 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final String RESOURCE_PACKAGE = "/tests/resources/"; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final String RESOURCE_PACKAGE_NAME = "tests.resources"; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static InputStream getStream(String name) { 383827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes // If we have the resources packaged up in our jar file, get them that way. 3917baca0a1628322f512b2a91486d8f454b722ac2Jesse Wilson String path = RESOURCE_PACKAGE + name; 4017baca0a1628322f512b2a91486d8f454b722ac2Jesse Wilson InputStream result = Support_Resources.class.getResourceAsStream(path); 413827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes if (result != null) { 423827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes return result; 4317baca0a1628322f512b2a91486d8f454b722ac2Jesse Wilson } 443827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes // Otherwise, if we're in an Android build tree, get the files directly. 453827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes String ANDROID_BUILD_TOP = System.getenv("ANDROID_BUILD_TOP"); 463827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes if (ANDROID_BUILD_TOP != null) { 473827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes File resource = new File(ANDROID_BUILD_TOP + "/libcore/support/src/test/java" + path); 483827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes if (resource.exists()) { 493827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes try { 503827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes return new FileInputStream(resource); 513827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes } catch (IOException ex) { 523827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes throw new IllegalArgumentException("Couldn't open: " + resource, ex); 533827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes } 543827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes } 553827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes } 563827b65b1937acfbf3abbc449f8ba0ffc60f3cf3Elliott Hughes throw new IllegalArgumentException("No such resource: " + path); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String getURL(String name) { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String folder = null; 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String fileName = name; 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File resources = createTempFolder(); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int index = name.lastIndexOf("/"); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (index != -1) { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project folder = name.substring(0, index); 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project name = name.substring(index + 1); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project copyFile(resources, folder, name); 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project URL url = null; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String resPath = resources.toString(); 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\') { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project resPath = resPath.substring(1); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project url = new URL("file:/" + resPath + "/" + fileName); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (MalformedURLException e) { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO Auto-generated catch block 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.printStackTrace(); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return url.toString(); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static File createTempFolder() { 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File folder = null; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project folder = File.createTempFile("hyts_resources", "", null); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project folder.delete(); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project folder.mkdirs(); 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO Auto-generated catch block 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.printStackTrace(); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project folder.deleteOnExit(); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return folder; 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static File copyFile(File root, String folder, String file) { 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File f; 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (folder != null) { 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project f = new File(root.toString() + "/" + folder); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!f.exists()) { 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project f.mkdirs(); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project f.deleteOnExit(); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project f = root; 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File dest = new File(f.toString() + "/" + file); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream in = Support_Resources.getStream(folder == null ? file 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project : folder + "/" + file); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project copyLocalFileto(dest, in); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (FileNotFoundException e) { 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO Auto-generated catch block 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.printStackTrace(); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO Auto-generated catch block 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.printStackTrace(); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dest; 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static File createTempFile(String suffix) throws IOException { 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return File.createTempFile("hyts_", suffix, null); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 131086fd0244a54fa5ecf13ea66d49b22b36d7d456eJesse Wilson public static void copyLocalFileto(File dest, InputStream in) throws IOException { 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!dest.exists()) { 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project FileOutputStream out = new FileOutputStream(dest); 13491922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom copy(in, out); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.close(); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dest.deleteOnExit(); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138086fd0244a54fa5ecf13ea66d49b22b36d7d456eJesse Wilson in.close(); 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 14191922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom private static int copy(InputStream in, OutputStream out) throws IOException { 14291922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom int total = 0; 14391922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom byte[] buffer = new byte[8192]; 14491922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom int c; 14591922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom while ((c = in.read(buffer)) != -1) { 14691922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom total += c; 14791922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom out.write(buffer, 0, c); 14891922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom } 14991922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom return total; 15091922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom } 15191922d920e0020bde20ef5ae21b66cab847dd58bBrian Carlstrom 152086fd0244a54fa5ecf13ea66d49b22b36d7d456eJesse Wilson public static File getExternalLocalFile(String url) throws IOException { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File resources = createTempFolder(); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream in = new URL(url).openStream(); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File temp = new File(resources.toString() + "/local.tmp"); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project copyLocalFileto(temp, in); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return temp; 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String getResourceURL(String resource) { 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return "http://" + Support_Configuration.TestResources + resource; 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Util method to load resource files 166f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name - name of resource file 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return - resource input stream 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static InputStream getResourceStream(String name) { 171728d33e7431ed0a19c3fe2f3caad92a9343c7f81Urs Grob InputStream is = Support_Resources.class.getResourceAsStream(name); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (is == null) { 174728d33e7431ed0a19c3fe2f3caad92a9343c7f81Urs Grob name = RESOURCE_PACKAGE + name; 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project is = Support_Resources.class.getResourceAsStream(name); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (is == null) { 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException("Failed to load resource: " + name); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 180f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return is; 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1841ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson public static File resourceToTempFile(String path) throws IOException { 1851ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson File f = File.createTempFile("out", ".xml"); 1861ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson f.deleteOnExit(); 1871ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson FileOutputStream out = new FileOutputStream(f); 1881ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson 1891ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson InputStream xml = Support_Resources.class.getResourceAsStream(path); 1901ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson int b; 1911ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson while ((b = xml.read()) != -1) { 1921ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson out.write(b); 1931ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson } 1941ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson out.flush(); 1951ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson out.close(); 1961ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson xml.close(); 1971ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson return f; 1981ec94feeb09591c30996c7c0834d6f131e204922Jesse Wilson } 199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public static void copyLocalFileTo(File dest, InputStream in) throws IOException { 201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (!dest.exists()) { 202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath FileOutputStream out = new FileOutputStream(dest); 203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int result; 204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath byte[] buf = new byte[4096]; 205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while ((result = in.read(buf)) != -1) { 206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath out.write(buf, 0, result); 207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath in.close(); 209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath out.close(); 210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath dest.deleteOnExit(); 211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 214