diff options
author | Joe Onorato <joeo@android.com> | 2009-06-12 11:06:24 -0700 |
---|---|---|
committer | Joe Onorato <joeo@android.com> | 2009-06-12 16:21:24 -0700 |
commit | 1cf587496fcb1d652bab9fc6792fb106b6fefaa4 (patch) | |
tree | 96e989c088b0e2fb8560d5b2e24562188a128e19 /core/java/android/backup/BackupDataInput.java | |
parent | 6599426f74371c823fcfe570f61577262eb0df44 (diff) | |
download | frameworks_base-1cf587496fcb1d652bab9fc6792fb106b6fefaa4.zip frameworks_base-1cf587496fcb1d652bab9fc6792fb106b6fefaa4.tar.gz frameworks_base-1cf587496fcb1d652bab9fc6792fb106b6fefaa4.tar.bz2 |
Add RestoreFileHelper, BackupDataInput, and add java wrappers for the methods on BackupDataOutput.
Diffstat (limited to 'core/java/android/backup/BackupDataInput.java')
-rw-r--r-- | core/java/android/backup/BackupDataInput.java | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/core/java/android/backup/BackupDataInput.java b/core/java/android/backup/BackupDataInput.java new file mode 100644 index 0000000..609dd90 --- /dev/null +++ b/core/java/android/backup/BackupDataInput.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2009 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.backup; + +import android.content.Context; + +import java.io.FileDescriptor; +import java.io.IOException; + +/** @hide */ +public class BackupDataInput { + int mBackupReader; + + private EntityHeader mHeader = new EntityHeader(); + private boolean mHeaderReady; + + private static class EntityHeader { + String key; + int dataSize; + } + + public BackupDataInput(FileDescriptor fd) { + if (fd == null) throw new NullPointerException(); + mBackupReader = ctor(fd); + if (mBackupReader == 0) { + throw new RuntimeException("Native initialization failed with fd=" + fd); + } + } + + protected void finalize() throws Throwable { + try { + dtor(mBackupReader); + } finally { + super.finalize(); + } + } + + public boolean readNextHeader() throws IOException { + int result = readNextHeader_native(mBackupReader, mHeader); + if (result == 0) { + // read successfully + mHeaderReady = true; + return true; + } else if (result > 0) { + // done + mHeaderReady = false; + return false; + } else { + // error + mHeaderReady = false; + throw new IOException("result=0x" + Integer.toHexString(result)); + } + } + + public String getKey() { + if (mHeaderReady) { + return mHeader.key; + } else { + throw new IllegalStateException("mHeaderReady=false"); + } + } + + public int getDataSize() { + if (mHeaderReady) { + return mHeader.dataSize; + } else { + throw new IllegalStateException("mHeaderReady=false"); + } + } + + public int readEntityData(byte[] data, int size) throws IOException { + if (mHeaderReady) { + int result = readEntityData_native(mBackupReader, data, size); + if (result >= 0) { + return result; + } else { + throw new IOException("result=0x" + Integer.toHexString(result)); + } + } else { + throw new IllegalStateException("mHeaderReady=false"); + } + } + + private native static int ctor(FileDescriptor fd); + private native static void dtor(int mBackupReader); + + private native int readNextHeader_native(int mBackupReader, EntityHeader entity); + private native int readEntityData_native(int mBackupReader, byte[] data, int size); +} |