97 lines
4.0 KiB
Java
97 lines
4.0 KiB
Java
/*
|
|
* Copyright (C) 2016 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.os;
|
|
|
|
import android.system.ErrnoException;
|
|
import android.system.OsConstants;
|
|
|
|
/**
|
|
* Callback that handles file system requests from ProxyFileDescriptor.
|
|
*
|
|
* All callback methods except for onRelease should throw {@link android.system.ErrnoException}
|
|
* with proper errno on errors. See
|
|
* <a href="http://man7.org/linux/man-pages/man3/errno.3.html">errno(3)</a> and
|
|
* {@link android.system.OsConstants}.
|
|
*
|
|
* Typical errnos are
|
|
*
|
|
* <ul>
|
|
* <li>{@link android.system.OsConstants#EIO} for general I/O issues
|
|
* <li>{@link android.system.OsConstants#ENOENT} when the file is not found
|
|
* <li>{@link android.system.OsConstants#EBADF} if the file doesn't allow read/write operations
|
|
* based on how it was opened. (For example, trying to write a file that was opened read-only.)
|
|
* <li>{@link android.system.OsConstants#ENOSPC} if you cannot handle a write operation to
|
|
* space/quota limitations.
|
|
* </ul>
|
|
* @see android.os.storage.StorageManager#openProxyFileDescriptor(int, ProxyFileDescriptorCallback,
|
|
* Handler)
|
|
*/
|
|
public abstract class ProxyFileDescriptorCallback {
|
|
/**
|
|
* Returns size of bytes provided by the file descriptor.
|
|
* @return Size of bytes.
|
|
* @throws ErrnoException ErrnoException containing E constants in OsConstants.
|
|
*/
|
|
public long onGetSize() throws ErrnoException {
|
|
throw new ErrnoException("onGetSize", OsConstants.EBADF);
|
|
}
|
|
|
|
/**
|
|
* Provides bytes read from file descriptor.
|
|
* It needs to return exact requested size of bytes unless it reaches file end.
|
|
* @param offset Offset in bytes from the file head specifying where to read bytes. If a seek
|
|
* operation is conducted on the file descriptor, then a read operation is requested, the
|
|
* offset refrects the proper position of requested bytes.
|
|
* @param size Size for read bytes.
|
|
* @param data Byte array to store read bytes.
|
|
* @return Size of bytes returned by the function.
|
|
* @throws ErrnoException ErrnoException containing E constants in OsConstants.
|
|
*/
|
|
public int onRead(long offset, int size, byte[] data) throws ErrnoException {
|
|
throw new ErrnoException("onRead", OsConstants.EBADF);
|
|
}
|
|
|
|
/**
|
|
* Handles bytes written to file descriptor.
|
|
* @param offset Offset in bytes from the file head specifying where to write bytes. If a seek
|
|
* operation is conducted on the file descriptor, then a write operation is requested, the
|
|
* offset refrects the proper position of requested bytes.
|
|
* @param size Size for write bytes.
|
|
* @param data Byte array to be written to somewhere.
|
|
* @return Size of bytes processed by the function.
|
|
* @throws ErrnoException ErrnoException containing E constants in OsConstants.
|
|
*/
|
|
public int onWrite(long offset, int size, byte[] data) throws ErrnoException {
|
|
throw new ErrnoException("onWrite", OsConstants.EBADF);
|
|
}
|
|
|
|
/**
|
|
* Ensures all the written data are stored in permanent storage device.
|
|
* For example, if it has data stored in on memory cache, it needs to flush data to storage
|
|
* device.
|
|
* @throws ErrnoException ErrnoException containing E constants in OsConstants.
|
|
*/
|
|
public void onFsync() throws ErrnoException {
|
|
throw new ErrnoException("onFsync", OsConstants.EINVAL);
|
|
}
|
|
|
|
/**
|
|
* Invoked after the file is closed.
|
|
*/
|
|
abstract public void onRelease();
|
|
}
|