FileDocCategorySizeDatePackage
FileBackupHelperBase.javaAPI DocAndroid 5.1 API4229Thu Mar 12 22:22:10 GMT 2015android.app.backup

FileBackupHelperBase

public class FileBackupHelperBase extends Object
Base class for the {@link android.app.backup.FileBackupHelper} implementation.

Fields Summary
private static final String
TAG
long
mPtr
android.content.Context
mContext
boolean
mExceptionLogged
Constructors Summary
FileBackupHelperBase(android.content.Context context)

    
      
        mPtr = ctor();
        mContext = context;
    
Methods Summary
private static native longctor()

private static native voiddtor(long ptr)

protected voidfinalize()

        try {
            dtor(mPtr);
        } finally {
            super.finalize();
        }
    
booleanisKeyInList(java.lang.String key, java.lang.String[] list)

        for (String s: list) {
            if (s.equals(key)) {
                return true;
            }
        }
        return false;
    
static voidperformBackup_checked(android.os.ParcelFileDescriptor oldState, BackupDataOutput data, android.os.ParcelFileDescriptor newState, java.lang.String[] files, java.lang.String[] keys)
Check the parameters so the native code doesn't have to throw all the exceptions since it's easier to do that from Java.

        if (files.length == 0) {
            return;
        }
        // files must be all absolute paths
        for (String f: files) {
            if (f.charAt(0) != '/") {
                throw new RuntimeException("files must have all absolute paths: " + f);
            }
        }
        // the length of files and keys must be the same
        if (files.length != keys.length) {
            throw new RuntimeException("files.length=" + files.length
                    + " keys.length=" + keys.length);
        }
        // oldStateFd can be null
        FileDescriptor oldStateFd = oldState != null ? oldState.getFileDescriptor() : null;
        FileDescriptor newStateFd = newState.getFileDescriptor();
        if (newStateFd == null) {
            throw new NullPointerException();
        }

        int err = performBackup_native(oldStateFd, data.mBackupWriter, newStateFd, files, keys);

        if (err != 0) {
            // TODO: more here
            throw new RuntimeException("Backup failed 0x" + Integer.toHexString(err));
        }
    
private static native intperformBackup_native(java.io.FileDescriptor oldState, long data, java.io.FileDescriptor newState, java.lang.String[] files, java.lang.String[] keys)

booleanwriteFile(java.io.File f, BackupDataInputStream in)

        int result = -1;

        // Create the enclosing directory.
        File parent = f.getParentFile();
        parent.mkdirs();

        result = writeFile_native(mPtr, f.getAbsolutePath(), in.mData.mBackupReader);
        if (result != 0) {
            // Bail on this entity.  Only log one failure per helper object.
            if (!mExceptionLogged) {
                Log.e(TAG, "Failed restoring file '" + f + "' for app '"
                        + mContext.getPackageName() + "\' result=0x"
                        + Integer.toHexString(result));
                mExceptionLogged = true;
            }
        }
        return (result == 0);
    
private static native intwriteFile_native(long ptr, java.lang.String filename, long backupReader)

public voidwriteNewStateDescription(android.os.ParcelFileDescriptor fd)

        int result = writeSnapshot_native(mPtr, fd.getFileDescriptor());
        // TODO: Do something with the error.
    
private static native intwriteSnapshot_native(long ptr, java.io.FileDescriptor fd)