1145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey/* 2145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * Copyright (C) 2011 The Android Open Source Project 3145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * 4145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * you may not use this file except in compliance with the License. 6145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * You may obtain a copy of the License at 7145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * 8145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * 10145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * See the License for the specific language governing permissions and 14145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * limitations under the License. 15145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey */ 16145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey 17145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkeypackage android.support.v4.os; 18145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey 19145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkeyimport android.os.Build; 20145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkeyimport android.os.Environment; 21145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkeyimport android.util.Log; 22145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey 23145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkeyimport java.io.File; 24145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkeyimport java.io.IOException; 25145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey 26145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey/** 27145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * Helper for accessing features in {@link Environment} introduced after API 28145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * level 4 in a backwards compatible fashion. 29145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey */ 30145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkeypublic class EnvironmentCompat { 31145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey private static final String TAG = "EnvironmentCompat"; 32145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey 33145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey /** 34145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * Unknown storage state, such as when a path isn't backed by known storage 35145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * media. 36145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * 37145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * @see #getStorageState(File) 38145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey */ 39145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey public static final String MEDIA_UNKNOWN = "unknown"; 40145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey 41145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey /** 42145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * Returns the current state of the storage device that provides the given 43145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * path. 44145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * 45145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * @return one of {@link #MEDIA_UNKNOWN}, {@link Environment#MEDIA_REMOVED}, 46145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * {@link Environment#MEDIA_UNMOUNTED}, 47145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * {@link Environment#MEDIA_CHECKING}, 48145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * {@link Environment#MEDIA_NOFS}, 49145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * {@link Environment#MEDIA_MOUNTED}, 50145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * {@link Environment#MEDIA_MOUNTED_READ_ONLY}, 51145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * {@link Environment#MEDIA_SHARED}, 52145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * {@link Environment#MEDIA_BAD_REMOVAL}, or 53145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey * {@link Environment#MEDIA_UNMOUNTABLE}. 54145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey */ 55145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey public static String getStorageState(File path) { 56145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey final int version = Build.VERSION.SDK_INT; 57145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey if (version >= 19) { 58145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey return EnvironmentCompatKitKat.getStorageState(path); 59145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey } 60145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey 61145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey try { 62145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey final String canonicalPath = path.getCanonicalPath(); 63145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey final String canonicalExternal = Environment.getExternalStorageDirectory() 64145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey .getCanonicalPath(); 65145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey 66145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey if (canonicalPath.startsWith(canonicalExternal)) { 67145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey return Environment.getExternalStorageState(); 68145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey } 69145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey } catch (IOException e) { 70145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey Log.w(TAG, "Failed to resolve canonical path: " + e); 71145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey } 72145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey 73145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey return MEDIA_UNKNOWN; 74145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey } 75145d27f9dd22e953d05e01327c9c2dac68634ae8Jeff Sharkey} 76