1 package android.app.backup;
2 
3 import android.compat.annotation.UnsupportedAppUsage;
4 import android.os.Build;
5 import android.os.ParcelFileDescriptor;
6 
7 /**
8  * Provides the interface through which a {@link BackupAgent} writes entire files
9  * to a full backup data set, via its {@link BackupAgent#onFullBackup(FullBackupDataOutput)}
10  * method.
11  */
12 public class FullBackupDataOutput {
13     // Currently a name-scoping shim around BackupDataOutput
14     @UnsupportedAppUsage
15     private final BackupDataOutput mData;
16     private final long mQuota;
17     private final int mTransportFlags;
18     private long mSize;
19 
20     /**
21      * Returns the quota in bytes for the application's current backup operation.  The
22      * value can vary for each operation.
23      *
24      * @see BackupDataOutput#getQuota()
25      */
getQuota()26     public long getQuota() {
27         return mQuota;
28     }
29 
30     /**
31      * Returns flags with additional information about the backup transport. For supported flags see
32      * {@link android.app.backup.BackupAgent}
33      *
34      * @see BackupDataOutput#getTransportFlags()
35      */
getTransportFlags()36     public int getTransportFlags() {
37         return mTransportFlags;
38     }
39 
40     /** @hide - used only in measure operation */
FullBackupDataOutput(long quota)41     public FullBackupDataOutput(long quota) {
42         mData = null;
43         mQuota = quota;
44         mSize = 0;
45         mTransportFlags = 0;
46     }
47 
48     /** @hide - used only in measure operation */
FullBackupDataOutput(long quota, int transportFlags)49     public FullBackupDataOutput(long quota, int transportFlags) {
50         mData = null;
51         mQuota = quota;
52         mSize = 0;
53         mTransportFlags = transportFlags;
54     }
55 
56     /** @hide */
FullBackupDataOutput(ParcelFileDescriptor fd, long quota)57     public FullBackupDataOutput(ParcelFileDescriptor fd, long quota) {
58         mData = new BackupDataOutput(fd.getFileDescriptor(), quota, 0);
59         mQuota = quota;
60         mTransportFlags = 0;
61     }
62 
63     /** @hide */
FullBackupDataOutput(ParcelFileDescriptor fd, long quota, int transportFlags)64     public FullBackupDataOutput(ParcelFileDescriptor fd, long quota, int transportFlags) {
65         mData = new BackupDataOutput(fd.getFileDescriptor(), quota, transportFlags);
66         mQuota = quota;
67         mTransportFlags = transportFlags;
68     }
69 
70     /** @hide - used only internally to the backup manager service's stream construction */
71     @UnsupportedAppUsage
FullBackupDataOutput(ParcelFileDescriptor fd)72     public FullBackupDataOutput(ParcelFileDescriptor fd) {
73         this(fd, /*quota=*/ -1, /*transportFlags=*/ 0);
74     }
75 
76     /** @hide */
77     @UnsupportedAppUsage
getData()78     public BackupDataOutput getData() { return mData; }
79 
80     /** @hide - used for measurement pass */
81     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
addSize(long size)82     public void addSize(long size) {
83         if (size > 0) {
84             mSize += size;
85         }
86     }
87 
88     /** @hide - used for measurement pass */
getSize()89     public long getSize() { return mSize; }
90 }
91