1 /*
2  * Copyright (C) 2010 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 /**
18  * @addtogroup Storage
19  * @{
20  */
21 
22 /**
23  * @file storage_manager.h
24  */
25 
26 #ifndef ANDROID_STORAGE_MANAGER_H
27 #define ANDROID_STORAGE_MANAGER_H
28 
29 #include <stdint.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 struct AStorageManager;
36 /**
37  * {@link AStorageManager} manages application OBB storage, a pointer
38  * can be obtained with AStorageManager_new().
39  */
40 typedef struct AStorageManager AStorageManager;
41 
42 /**
43  * The different states of a OBB storage passed to AStorageManager_obbCallbackFunc().
44  */
45 enum {
46     /**
47      * The OBB container is now mounted and ready for use. Can be returned
48      * as the status for callbacks made during asynchronous OBB actions.
49      */
50     AOBB_STATE_MOUNTED = 1,
51 
52     /**
53      * The OBB container is now unmounted and not usable. Can be returned
54      * as the status for callbacks made during asynchronous OBB actions.
55      */
56     AOBB_STATE_UNMOUNTED = 2,
57 
58     /**
59      * There was an internal system error encountered while trying to
60      * mount the OBB. Can be returned as the status for callbacks made
61      * during asynchronous OBB actions.
62      */
63     AOBB_STATE_ERROR_INTERNAL = 20,
64 
65     /**
66      * The OBB could not be mounted by the system. Can be returned as the
67      * status for callbacks made during asynchronous OBB actions.
68      */
69     AOBB_STATE_ERROR_COULD_NOT_MOUNT = 21,
70 
71     /**
72      * The OBB could not be unmounted. This most likely indicates that a
73      * file is in use on the OBB. Can be returned as the status for
74      * callbacks made during asynchronous OBB actions.
75      */
76     AOBB_STATE_ERROR_COULD_NOT_UNMOUNT = 22,
77 
78     /**
79      * A call was made to unmount the OBB when it was not mounted. Can be
80      * returned as the status for callbacks made during asynchronous OBB
81      * actions.
82      */
83     AOBB_STATE_ERROR_NOT_MOUNTED = 23,
84 
85     /**
86      * The OBB has already been mounted. Can be returned as the status for
87      * callbacks made during asynchronous OBB actions.
88      */
89     AOBB_STATE_ERROR_ALREADY_MOUNTED = 24,
90 
91     /**
92      * The current application does not have permission to use this OBB.
93      * This could be because the OBB indicates it's owned by a different
94      * package. Can be returned as the status for callbacks made during
95      * asynchronous OBB actions.
96      */
97     AOBB_STATE_ERROR_PERMISSION_DENIED = 25,
98 };
99 
100 /**
101  * Obtains a new instance of AStorageManager.
102  */
103 AStorageManager* AStorageManager_new();
104 
105 /**
106  * Release AStorageManager instance.
107  */
108 void AStorageManager_delete(AStorageManager* mgr);
109 
110 /**
111  * Callback function for asynchronous calls made on OBB files.
112  *
113  * "state" is one of the following constants:
114  * - {@link AOBB_STATE_MOUNTED}
115  * - {@link AOBB_STATE_UNMOUNTED}
116  * - {@link AOBB_STATE_ERROR_INTERNAL}
117  * - {@link AOBB_STATE_ERROR_COULD_NOT_MOUNT}
118  * - {@link AOBB_STATE_ERROR_COULD_NOT_UNMOUNT}
119  * - {@link AOBB_STATE_ERROR_NOT_MOUNTED}
120  * - {@link AOBB_STATE_ERROR_ALREADY_MOUNTED}
121  * - {@link AOBB_STATE_ERROR_PERMISSION_DENIED}
122  */
123 typedef void (*AStorageManager_obbCallbackFunc)(const char* filename, const int32_t state, void* data);
124 
125 /**
126  * Attempts to mount an OBB file. This is an asynchronous operation.
127  */
128 void AStorageManager_mountObb(AStorageManager* mgr, const char* filename, const char* key,
129         AStorageManager_obbCallbackFunc cb, void* data);
130 
131 /**
132  * Attempts to unmount an OBB file. This is an asynchronous operation.
133  */
134 void AStorageManager_unmountObb(AStorageManager* mgr, const char* filename, const int force,
135         AStorageManager_obbCallbackFunc cb, void* data);
136 
137 /**
138  * Check whether an OBB is mounted.
139  */
140 int AStorageManager_isObbMounted(AStorageManager* mgr, const char* filename);
141 
142 /**
143  * Get the mounted path for an OBB.
144  */
145 const char* AStorageManager_getMountedObbPath(AStorageManager* mgr, const char* filename);
146 
147 
148 #ifdef __cplusplus
149 };
150 #endif
151 
152 #endif      // ANDROID_STORAGE_MANAGER_H
153 
154 /** @} */
155