• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.support.v4.os;
18 
19 import android.os.Build;
20 import android.os.Environment;
21 import android.util.Log;
22 
23 import java.io.File;
24 import java.io.IOException;
25 
26 /**
27  * Helper for accessing features in {@link Environment} introduced after API
28  * level 4 in a backwards compatible fashion.
29  */
30 public class EnvironmentCompat {
31     private static final String TAG = "EnvironmentCompat";
32 
33     /**
34      * Unknown storage state, such as when a path isn't backed by known storage
35      * media.
36      *
37      * @see #getStorageState(File)
38      */
39     public static final String MEDIA_UNKNOWN = "unknown";
40 
41     /**
42      * Returns the current state of the storage device that provides the given
43      * path.
44      *
45      * @return one of {@link #MEDIA_UNKNOWN}, {@link Environment#MEDIA_REMOVED},
46      *         {@link Environment#MEDIA_UNMOUNTED},
47      *         {@link Environment#MEDIA_CHECKING},
48      *         {@link Environment#MEDIA_NOFS},
49      *         {@link Environment#MEDIA_MOUNTED},
50      *         {@link Environment#MEDIA_MOUNTED_READ_ONLY},
51      *         {@link Environment#MEDIA_SHARED},
52      *         {@link Environment#MEDIA_BAD_REMOVAL}, or
53      *         {@link Environment#MEDIA_UNMOUNTABLE}.
54      */
getStorageState(File path)55     public static String getStorageState(File path) {
56         final int version = Build.VERSION.SDK_INT;
57         if (version >= 19) {
58             return EnvironmentCompatKitKat.getStorageState(path);
59         }
60 
61         try {
62             final String canonicalPath = path.getCanonicalPath();
63             final String canonicalExternal = Environment.getExternalStorageDirectory()
64                     .getCanonicalPath();
65 
66             if (canonicalPath.startsWith(canonicalExternal)) {
67                 return Environment.getExternalStorageState();
68             }
69         } catch (IOException e) {
70             Log.w(TAG, "Failed to resolve canonical path: " + e);
71         }
72 
73         return MEDIA_UNKNOWN;
74     }
75 }
76