/* * Tweetings - Twitter client for Android * * Copyright (C) 2012-2013 RBD Solutions Limited <apps@tweetings.net> * Copyright (C) 2012 Mariotaku Lee <mariotaku.lee@gmail.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.dwdesign.tweetings.util; import java.io.File; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.os.Environment; public final class EnvironmentAccessor { /** * Standard directory in which to place any audio files that should be in * the list of alarms that the user can select (not as regular music). **/ public static String DIRECTORY_ALARMS; /** * The traditional location for pictures and videos when mounting the device * as a camera. **/ public static String DIRECTORY_DCIM; /** * Standard directory in which to place files that have been downloaded by * the user. **/ public static String DIRECTORY_DOWNLOADS; /** * Standard directory in which to place movies that are available to the * user. **/ public static String DIRECTORY_MOVIES; /** * Standard directory in which to place any audio files that should be in * the regular list of music for the user. **/ public static String DIRECTORY_MUSIC; /** * Standard directory in which to place any audio files that should be in * the list of notifications that the user can select (not as regular * music). **/ public static String DIRECTORY_NOTIFICATIONS; /** * Standard directory in which to place pictures that are available to the * user. **/ public static String DIRECTORY_PICTURES; /** * Standard directory in which to place any audio files that should be in * the list of podcasts that the user can select (not as regular music). **/ public static String DIRECTORY_PODCASTS; /** * Standard directory in which to place any audio files that should be in * the list of ringtones that the user can select (not as regular music). */ public static String DIRECTORY_RINGTONES; static { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) { ExternalStoragePublicDirectoryInitializer.init(); } else { DIRECTORY_ALARMS = "Alarms"; DIRECTORY_DCIM = "DCIM"; DIRECTORY_DOWNLOADS = "Download"; DIRECTORY_MOVIES = "Movies"; DIRECTORY_MUSIC = "Music"; DIRECTORY_NOTIFICATIONS = "Notifications"; DIRECTORY_PICTURES = "Pictures"; DIRECTORY_PODCASTS = "Podcasts"; DIRECTORY_RINGTONES = "Ringtones"; } } public static File getExternalCacheDir(final Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) return GetExternalCacheDirAccessorFroyo.getExternalCacheDir(context); final File ext_storage_dir = Environment.getExternalStorageDirectory(); if (ext_storage_dir != null && ext_storage_dir.isDirectory()) { final String ext_cache_path = ext_storage_dir.getAbsolutePath() + "/Android/data/" + context.getPackageName() + "/cache/"; final File ext_cache_dir = new File(ext_cache_path); if (ext_cache_dir.isDirectory() || ext_cache_dir.mkdirs()) return ext_cache_dir; } return null; } public static File getExternalStoragePublicDirectory(final String type) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) return GetExternalStoragePublicDirectoryAccessorFroyo.getExternalStoragePublicDirectory(type); else { final File ext_dir = Environment.getExternalStorageDirectory(); if (ext_dir == null || type == null) return null; return new File(ext_dir, type); } } @TargetApi(Build.VERSION_CODES.FROYO) private static class ExternalStoragePublicDirectoryInitializer { static void init() { DIRECTORY_ALARMS = Environment.DIRECTORY_ALARMS; DIRECTORY_DCIM = Environment.DIRECTORY_DCIM; DIRECTORY_DOWNLOADS = Environment.DIRECTORY_DOWNLOADS; DIRECTORY_MOVIES = Environment.DIRECTORY_MOVIES; DIRECTORY_MUSIC = Environment.DIRECTORY_MUSIC; DIRECTORY_NOTIFICATIONS = Environment.DIRECTORY_NOTIFICATIONS; DIRECTORY_PICTURES = Environment.DIRECTORY_PICTURES; DIRECTORY_PODCASTS = Environment.DIRECTORY_PODCASTS; DIRECTORY_RINGTONES = Environment.DIRECTORY_RINGTONES; } } @TargetApi(Build.VERSION_CODES.FROYO) private static class GetExternalCacheDirAccessorFroyo { private static File getExternalCacheDir(final Context context) { return context.getExternalCacheDir(); } } @TargetApi(Build.VERSION_CODES.FROYO) private static class GetExternalStoragePublicDirectoryAccessorFroyo { public static File getExternalStoragePublicDirectory(final String type) { return Environment.getExternalStoragePublicDirectory(type); } } }