1ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/* 2ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Copyright (C) 2009 The Android Open Source Project 3ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Licensed under the Apache License, Version 2.0 (the "License"); 5ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * you may not use this file except in compliance with the License. 6ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * You may obtain a copy of the License at 7ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 8ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * http://www.apache.org/licenses/LICENSE-2.0 9ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 10ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Unless required by applicable law or agreed to in writing, software 11ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * distributed under the License is distributed on an "AS IS" BASIS, 12ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * See the License for the specific language governing permissions and 14ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * limitations under the License. 15ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 16ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1781393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschipackage com.android.videoeditor.util; 18ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 19ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.io.File; 20ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.io.FileNotFoundException; 21ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.io.FileOutputStream; 22ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.io.IOException; 23ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.io.InputStream; 24ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 2581393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschiimport com.android.videoeditor.R; 2681393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschi 27ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.Context; 28ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.graphics.Bitmap; 29ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.graphics.BitmapFactory; 30ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.graphics.Bitmap.CompressFormat; 31ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.media.videoeditor.MediaProperties; 32ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.os.Environment; 33ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.util.Log; 34ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 35ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/** 36ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * File utilities 37ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 38ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschipublic class FileUtils { 39ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Logging 40ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String TAG = "FileUtils"; 41ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 42ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 43ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * It is not possible to instantiate this class 44ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 45ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private FileUtils() { 46ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 47ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 48ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 4915eda327c9efcb98ddaad61e728c93da41fa3c21Shih-chia Cheng * Gets the root path for all projects 50ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 5115eda327c9efcb98ddaad61e728c93da41fa3c21Shih-chia Cheng * @param context The context 5283af1c18a2eaab1b53fd29d5c9118e1f078b6e3dGil Dobjanschi * 53a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng * @return The file representing the projects root directory, {@code null} if the external 54a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng * storage is not currnetly mounted 55ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 5683af1c18a2eaab1b53fd29d5c9118e1f078b6e3dGil Dobjanschi public static File getProjectsRootDir(Context context) 5783af1c18a2eaab1b53fd29d5c9118e1f078b6e3dGil Dobjanschi throws FileNotFoundException, IOException { 58ccf40984dfe63839a81ecb06a748a68adf836f0eGil Dobjanschi final File dir = context.getExternalFilesDir(null); 59a2ae3e79b64426c53c46cbf175d1f26e26139798Shih-chia Cheng if (dir != null && !dir.exists()) { 60ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (!dir.mkdirs()) { 61ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new FileNotFoundException("Cannot create folder: " + dir.getAbsolutePath()); 62ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 63ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Create the file which hides the media files 64ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (!new File(dir, ".nomedia").createNewFile()) { 65ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new FileNotFoundException("Cannot create file .nomedia"); 66ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 67ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 68ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 69ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 70ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return dir; 71ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 72ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 73ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 74ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get the filename for the specified raw resource id. Create the file if 75ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * the file does not exist. 76ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 77ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 78ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param maskRawResourceId The mask raw resource id 79ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 80ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The mask filename 81ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 82ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static String getMaskFilename(Context context, int maskRawResourceId) 83ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throws FileNotFoundException, IOException { 84ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String filename; 85ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi switch (maskRawResourceId) { 86ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case R.raw.mask_contour: { 87ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = "mask_countour.jpg"; 88ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 89ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 90ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 91ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case R.raw.mask_diagonal: { 92ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = "mask_diagonal.jpg"; 93ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 94ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 95ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 96ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi default: { 97ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Invalid mask raw resource id"); 98ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 99ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 100ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 101ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final File mf = new File(context.getFilesDir(), filename); 102ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (!mf.exists()) { 103ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Bitmap bitmap = null; 104ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi FileOutputStream fos = null; 105ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi InputStream is = null; 106ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 107ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi is = context.getResources().openRawResource(maskRawResourceId); 108ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi bitmap = BitmapFactory.decodeStream(is); 109ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (bitmap == null) { 110ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalStateException("Cannot decode raw resource mask"); 111ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 112ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 113ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi fos = context.openFileOutput(filename, Context.MODE_WORLD_READABLE); 114ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (!bitmap.compress(CompressFormat.JPEG, 100, fos)) { 115ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalStateException("Cannot compress bitmap"); 116ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 117ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } finally { 118ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (is != null) { 119ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi is.close(); 120ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 121ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 122ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (bitmap != null) { 123ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi bitmap.recycle(); 124ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 125ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 126ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (fos != null) { 127ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi fos.flush(); 128ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi fos.close(); 129ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 130ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 131ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 132ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 133ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mf.getAbsolutePath(); 134ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 135ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 136ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 137ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get the raw id for the mask file 138ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 139ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param path The full file name 140ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 141ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The raw id 142ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 143ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static int getMaskRawId(String path) { 144ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String filename = new File(path).getName(); 145ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 146ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (filename.equals("mask_countour.jpg")) { 147ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return R.raw.mask_contour; 148ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else if (filename.equals("mask_diagonal.jpg")) { 149ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return R.raw.mask_diagonal; 150ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 151ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Unknown file: " + path); 152ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 153ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 154ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 155ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 156ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get the filename for the specified raw resource id. Create the file if 157ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * the file does not exist 158ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 159ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param context The context 160ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param rawResourceId The raw resource id 161ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 162ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The audio track filename 163ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 164ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static String getAudioTrackFilename(Context context, int rawResourceId) 165ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throws FileNotFoundException, IOException { 166ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String filename; 167ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi switch (rawResourceId) { 168ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case R.raw.theme_travel_audio_track: { 169ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = "theme_travel.m4a"; 170ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 171ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 172ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 173ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case R.raw.theme_surfing_audio_track: { 174ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = "theme_surfing.m4a"; 175ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 176ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 177ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 178ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case R.raw.theme_film_audio_track: { 179ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = "theme_film.m4a"; 180ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 181ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 182ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 183ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case R.raw.theme_rockandroll_audio_track: { 184ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = "theme_rockandroll.m4a"; 185ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 186ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 187ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 188ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi default: { 189ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Invalid audio track raw resource id"); 190ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 191ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 192ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 193ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final File mf = new File(context.getFilesDir(), filename); 194ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (!mf.exists()) { 195ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi FileOutputStream fos = null; 196ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi InputStream is = null; 197ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi try { 198ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi is = context.getResources().openRawResource(rawResourceId); 199ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi fos = context.openFileOutput(filename, Context.MODE_WORLD_READABLE); 200ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final byte[] buffer = new byte[1024]; 201ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi int bytesRead; 202ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi while ((bytesRead = is.read(buffer)) > 0) { 203ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi fos.write(buffer, 0, bytesRead); 204ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 205ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } finally { 206ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (is != null) { 207ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi is.close(); 208ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 209ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 210ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (fos != null) { 211ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi fos.flush(); 212ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi fos.close(); 213ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 214ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 215ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 216ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 217ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return mf.getAbsolutePath(); 218ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 219ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 220ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 221ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Create a new project directory 222ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 223ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The absolute path to the project 224ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 22583af1c18a2eaab1b53fd29d5c9118e1f078b6e3dGil Dobjanschi public static String createNewProjectPath(Context context) 22683af1c18a2eaab1b53fd29d5c9118e1f078b6e3dGil Dobjanschi throws FileNotFoundException, IOException { 22783af1c18a2eaab1b53fd29d5c9118e1f078b6e3dGil Dobjanschi final File file = new File(getProjectsRootDir(context), StringUtils.randomString(10)); 228ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 229ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "New project: " + file.getAbsolutePath()); 230ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 231ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 232ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return file.getAbsolutePath(); 233ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 234ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 235ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 236ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get a unique video filename. 237ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 238ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param fileType The file type 239ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 240ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The filename 241ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 242ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static String createMovieName(int fileType) { 243ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String filename; 244ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi switch (fileType) { 245ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case MediaProperties.FILE_MP4: { 246ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = "movie_" + StringUtils.randomStringOfNumbers(6) + ".mp4"; 247ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 248ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 249ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 250ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi case MediaProperties.FILE_3GP: { 251ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi filename = "movie_" + StringUtils.randomStringOfNumbers(6) + ".3gp"; 252ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi break; 253ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 254ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 255ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi default: { 256ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi throw new IllegalArgumentException("Unsupported file type: " + fileType); 257ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 258ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 259ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 260ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final File moviesDirectory = Environment.getExternalStoragePublicDirectory( 261ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Environment.DIRECTORY_MOVIES); 262ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Make this directory if it does not exist 263ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (!moviesDirectory.exists()) { 264ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi moviesDirectory.mkdirs(); 265ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 266ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 267ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final File f = new File(moviesDirectory, filename); 268ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return f.getAbsolutePath(); 269ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 270ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 271ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 272ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Delete all the files in the specified folder and the folder itself. 273ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 274ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param dir The project path 275ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 276ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static boolean deleteDir(File dir) { 277ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (dir.isDirectory()) { 278ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final String[] children = dir.list(); 279ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (int i = 0; i < children.length; i++) { 280ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final File f = new File(dir, children[i]); 281ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (!deleteDir(f)) { 282ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.e(TAG, "File cannot be deleted: " + f.getAbsolutePath()); 283ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return false; 284ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 285ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 286ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 287ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 288ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // The directory is now empty so delete it 289ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return dir.delete(); 290ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 291ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 292ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 293ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Get the name of the file 294ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 295ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param filename The full path filename 296ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The name of the file 297ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 298ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public static String getSimpleName(String filename) { 299ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final int index = filename.lastIndexOf('/'); 300ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (index == -1) { 301ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return filename; 302ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 303ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return filename.substring(index + 1); 304ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 305ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 306ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi} 307