1951a39d68df598db08dfced8b4707755864a0492Ying Wang/*
2951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (C) 2010 The Android Open Source Project
3951a39d68df598db08dfced8b4707755864a0492Ying Wang *
4951a39d68df598db08dfced8b4707755864a0492Ying Wang * Licensed under the Apache License, Version 2.0 (the "License");
5951a39d68df598db08dfced8b4707755864a0492Ying Wang * you may not use this file except in compliance with the License.
6951a39d68df598db08dfced8b4707755864a0492Ying Wang * You may obtain a copy of the License at
7951a39d68df598db08dfced8b4707755864a0492Ying Wang *
8951a39d68df598db08dfced8b4707755864a0492Ying Wang *      http://www.apache.org/licenses/LICENSE-2.0
9951a39d68df598db08dfced8b4707755864a0492Ying Wang *
10951a39d68df598db08dfced8b4707755864a0492Ying Wang * Unless required by applicable law or agreed to in writing, software
11951a39d68df598db08dfced8b4707755864a0492Ying Wang * distributed under the License is distributed on an "AS IS" BASIS,
12951a39d68df598db08dfced8b4707755864a0492Ying Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13951a39d68df598db08dfced8b4707755864a0492Ying Wang * See the License for the specific language governing permissions and
14951a39d68df598db08dfced8b4707755864a0492Ying Wang * limitations under the License.
15951a39d68df598db08dfced8b4707755864a0492Ying Wang */
16951a39d68df598db08dfced8b4707755864a0492Ying Wang
17951a39d68df598db08dfced8b4707755864a0492Ying Wang
18951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef ANDROID_STORAGE_MANAGER_H
19951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ANDROID_STORAGE_MANAGER_H
20951a39d68df598db08dfced8b4707755864a0492Ying Wang
21951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <stdint.h>
22951a39d68df598db08dfced8b4707755864a0492Ying Wang
23951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __cplusplus
24951a39d68df598db08dfced8b4707755864a0492Ying Wangextern "C" {
25951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
26951a39d68df598db08dfced8b4707755864a0492Ying Wang
27951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct AStorageManager;
28951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct AStorageManager AStorageManager;
29951a39d68df598db08dfced8b4707755864a0492Ying Wang
30951a39d68df598db08dfced8b4707755864a0492Ying Wangenum {
31951a39d68df598db08dfced8b4707755864a0492Ying Wang    /*
32951a39d68df598db08dfced8b4707755864a0492Ying Wang     * The OBB container is now mounted and ready for use. Can be returned
33951a39d68df598db08dfced8b4707755864a0492Ying Wang     * as the status for callbacks made during asynchronous OBB actions.
34951a39d68df598db08dfced8b4707755864a0492Ying Wang     */
35951a39d68df598db08dfced8b4707755864a0492Ying Wang    AOBB_STATE_MOUNTED = 1,
36951a39d68df598db08dfced8b4707755864a0492Ying Wang
37951a39d68df598db08dfced8b4707755864a0492Ying Wang    /*
38951a39d68df598db08dfced8b4707755864a0492Ying Wang     * The OBB container is now unmounted and not usable. Can be returned
39951a39d68df598db08dfced8b4707755864a0492Ying Wang     * as the status for callbacks made during asynchronous OBB actions.
40951a39d68df598db08dfced8b4707755864a0492Ying Wang     */
41951a39d68df598db08dfced8b4707755864a0492Ying Wang    AOBB_STATE_UNMOUNTED = 2,
42951a39d68df598db08dfced8b4707755864a0492Ying Wang
43951a39d68df598db08dfced8b4707755864a0492Ying Wang    /*
44951a39d68df598db08dfced8b4707755864a0492Ying Wang     * There was an internal system error encountered while trying to
45951a39d68df598db08dfced8b4707755864a0492Ying Wang     * mount the OBB. Can be returned as the status for callbacks made
46951a39d68df598db08dfced8b4707755864a0492Ying Wang     * during asynchronous OBB actions.
47951a39d68df598db08dfced8b4707755864a0492Ying Wang     */
48951a39d68df598db08dfced8b4707755864a0492Ying Wang    AOBB_STATE_ERROR_INTERNAL = 20,
49951a39d68df598db08dfced8b4707755864a0492Ying Wang
50951a39d68df598db08dfced8b4707755864a0492Ying Wang    /*
51951a39d68df598db08dfced8b4707755864a0492Ying Wang     * The OBB could not be mounted by the system. Can be returned as the
52951a39d68df598db08dfced8b4707755864a0492Ying Wang     * status for callbacks made during asynchronous OBB actions.
53951a39d68df598db08dfced8b4707755864a0492Ying Wang     */
54951a39d68df598db08dfced8b4707755864a0492Ying Wang    AOBB_STATE_ERROR_COULD_NOT_MOUNT = 21,
55951a39d68df598db08dfced8b4707755864a0492Ying Wang
56951a39d68df598db08dfced8b4707755864a0492Ying Wang    /*
57951a39d68df598db08dfced8b4707755864a0492Ying Wang     * The OBB could not be unmounted. This most likely indicates that a
58951a39d68df598db08dfced8b4707755864a0492Ying Wang     * file is in use on the OBB. Can be returned as the status for
59951a39d68df598db08dfced8b4707755864a0492Ying Wang     * callbacks made during asynchronous OBB actions.
60951a39d68df598db08dfced8b4707755864a0492Ying Wang     */
61951a39d68df598db08dfced8b4707755864a0492Ying Wang    AOBB_STATE_ERROR_COULD_NOT_UNMOUNT = 22,
62951a39d68df598db08dfced8b4707755864a0492Ying Wang
63951a39d68df598db08dfced8b4707755864a0492Ying Wang    /*
64951a39d68df598db08dfced8b4707755864a0492Ying Wang     * A call was made to unmount the OBB when it was not mounted. Can be
65951a39d68df598db08dfced8b4707755864a0492Ying Wang     * returned as the status for callbacks made during asynchronous OBB
66951a39d68df598db08dfced8b4707755864a0492Ying Wang     * actions.
67951a39d68df598db08dfced8b4707755864a0492Ying Wang     */
68951a39d68df598db08dfced8b4707755864a0492Ying Wang    AOBB_STATE_ERROR_NOT_MOUNTED = 23,
69951a39d68df598db08dfced8b4707755864a0492Ying Wang
70951a39d68df598db08dfced8b4707755864a0492Ying Wang    /*
71951a39d68df598db08dfced8b4707755864a0492Ying Wang     * The OBB has already been mounted. Can be returned as the status for
72951a39d68df598db08dfced8b4707755864a0492Ying Wang     * callbacks made during asynchronous OBB actions.
73951a39d68df598db08dfced8b4707755864a0492Ying Wang     */
74951a39d68df598db08dfced8b4707755864a0492Ying Wang    AOBB_STATE_ERROR_ALREADY_MOUNTED = 24,
75951a39d68df598db08dfced8b4707755864a0492Ying Wang
76951a39d68df598db08dfced8b4707755864a0492Ying Wang    /*
77951a39d68df598db08dfced8b4707755864a0492Ying Wang     * The current application does not have permission to use this OBB.
78951a39d68df598db08dfced8b4707755864a0492Ying Wang     * This could be because the OBB indicates it's owned by a different
79951a39d68df598db08dfced8b4707755864a0492Ying Wang     * package. Can be returned as the status for callbacks made during
80951a39d68df598db08dfced8b4707755864a0492Ying Wang     * asynchronous OBB actions.
81951a39d68df598db08dfced8b4707755864a0492Ying Wang     */
82951a39d68df598db08dfced8b4707755864a0492Ying Wang    AOBB_STATE_ERROR_PERMISSION_DENIED = 25,
83951a39d68df598db08dfced8b4707755864a0492Ying Wang};
84951a39d68df598db08dfced8b4707755864a0492Ying Wang
85951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
86951a39d68df598db08dfced8b4707755864a0492Ying Wang * Obtains a new instance of AStorageManager.
87951a39d68df598db08dfced8b4707755864a0492Ying Wang */
88951a39d68df598db08dfced8b4707755864a0492Ying WangAStorageManager* AStorageManager_new();
89951a39d68df598db08dfced8b4707755864a0492Ying Wang
90951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
91951a39d68df598db08dfced8b4707755864a0492Ying Wang * Release AStorageManager instance.
92951a39d68df598db08dfced8b4707755864a0492Ying Wang */
93951a39d68df598db08dfced8b4707755864a0492Ying Wangvoid AStorageManager_delete(AStorageManager* mgr);
94951a39d68df598db08dfced8b4707755864a0492Ying Wang
95951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
96951a39d68df598db08dfced8b4707755864a0492Ying Wang * Callback function for asynchronous calls made on OBB files.
97951a39d68df598db08dfced8b4707755864a0492Ying Wang */
98951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef void (*AStorageManager_obbCallbackFunc)(const char* filename, const int32_t state, void* data);
99951a39d68df598db08dfced8b4707755864a0492Ying Wang
100951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
101951a39d68df598db08dfced8b4707755864a0492Ying Wang * Attempts to mount an OBB file. This is an asynchronous operation.
102951a39d68df598db08dfced8b4707755864a0492Ying Wang */
103951a39d68df598db08dfced8b4707755864a0492Ying Wangvoid AStorageManager_mountObb(AStorageManager* mgr, const char* filename, const char* key,
104951a39d68df598db08dfced8b4707755864a0492Ying Wang        AStorageManager_obbCallbackFunc cb, void* data);
105951a39d68df598db08dfced8b4707755864a0492Ying Wang
106951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
107951a39d68df598db08dfced8b4707755864a0492Ying Wang * Attempts to unmount an OBB file. This is an asynchronous operation.
108951a39d68df598db08dfced8b4707755864a0492Ying Wang */
109951a39d68df598db08dfced8b4707755864a0492Ying Wangvoid AStorageManager_unmountObb(AStorageManager* mgr, const char* filename, const int force,
110951a39d68df598db08dfced8b4707755864a0492Ying Wang        AStorageManager_obbCallbackFunc cb, void* data);
111951a39d68df598db08dfced8b4707755864a0492Ying Wang
112951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
113951a39d68df598db08dfced8b4707755864a0492Ying Wang * Check whether an OBB is mounted.
114951a39d68df598db08dfced8b4707755864a0492Ying Wang */
115951a39d68df598db08dfced8b4707755864a0492Ying Wangint AStorageManager_isObbMounted(AStorageManager* mgr, const char* filename);
116951a39d68df598db08dfced8b4707755864a0492Ying Wang
117951a39d68df598db08dfced8b4707755864a0492Ying Wang/**
118951a39d68df598db08dfced8b4707755864a0492Ying Wang * Get the mounted path for an OBB.
119951a39d68df598db08dfced8b4707755864a0492Ying Wang */
120951a39d68df598db08dfced8b4707755864a0492Ying Wangconst char* AStorageManager_getMountedObbPath(AStorageManager* mgr, const char* filename);
121951a39d68df598db08dfced8b4707755864a0492Ying Wang
122951a39d68df598db08dfced8b4707755864a0492Ying Wang
123951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __cplusplus
124951a39d68df598db08dfced8b4707755864a0492Ying Wang};
125951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
126951a39d68df598db08dfced8b4707755864a0492Ying Wang
127951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif      // ANDROID_STORAGE_MANAGER_H
128