1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.app.backup;
18
19import android.app.backup.RestoreSet;
20import android.app.backup.IRestoreObserver;
21
22/**
23 * Binder interface used by clients who wish to manage a restore operation.  Every
24 * method in this interface requires the android.permission.BACKUP permission.
25 *
26 * {@hide}
27 */
28interface IRestoreSession {
29    /**
30     * Ask the current transport what the available restore sets are.
31     *
32     * @param observer This binder points to an object whose onRestoreSetsAvailable()
33     *   method will be called to supply the results of the transport's lookup.
34     * @return Zero on success; nonzero on error.  The observer will only receive a
35     *   result callback if this method returned zero.
36     */
37    int getAvailableRestoreSets(IRestoreObserver observer);
38
39    /**
40     * Restore the given set onto the device, replacing the current data of any app
41     * contained in the restore set with the data previously backed up.
42     *
43     * <p>Callers must hold the android.permission.BACKUP permission to use this method.
44     *
45     * @return Zero on success; nonzero on error.  The observer will only receive
46     *   progress callbacks if this method returned zero.
47     * @param token The token from {@link getAvailableRestoreSets()} corresponding to
48     *   the restore set that should be used.
49     * @param observer If non-null, this binder points to an object that will receive
50     *   progress callbacks during the restore operation.
51     */
52    int restoreAll(long token, IRestoreObserver observer);
53
54    /**
55     * Restore select packages from the given set onto the device, replacing the
56     * current data of any app contained in the set with the data previously
57     * backed up.
58     *
59     * <p>Callers must hold the android.permission.BACKUP permission to use this method.
60     *
61     * @return Zero on success, nonzero on error. The observer will only receive
62     *   progress callbacks if this method returned zero.
63     * @param token The token from {@link getAvailableRestoreSets()} corresponding to
64     *   the restore set that should be used.
65     * @param observer If non-null, this binder points to an object that will receive
66     *   progress callbacks during the restore operation.
67     * @param packages The set of packages for which to attempt a restore.  Regardless of
68     *   the contents of the actual back-end dataset named by {@code token}, only
69     *   applications mentioned in this list will have their data restored.
70     */
71    int restoreSome(long token, IRestoreObserver observer, in String[] packages);
72
73    /**
74     * Restore a single application from backup.  The data will be restored from the
75     * current backup dataset if the given package has stored data there, or from
76     * the dataset used during the last full device setup operation if the current
77     * backup dataset has no matching data.  If no backup data exists for this package
78     * in either source, a nonzero value will be returned.
79     *
80     * @return Zero on success; nonzero on error.  The observer will only receive
81     *   progress callbacks if this method returned zero.
82     * @param packageName The name of the package whose data to restore.  If this is
83     *   not the name of the caller's own package, then the android.permission.BACKUP
84     *   permission must be held.
85     * @param observer If non-null, this binder points to an object that will receive
86     *   progress callbacks during the restore operation.
87     */
88    int restorePackage(in String packageName, IRestoreObserver observer);
89
90    /**
91     * End this restore session.  After this method is called, the IRestoreSession binder
92     * is no longer valid.
93     *
94     * <p><b>Note:</b> The caller <i>must</i> invoke this method to end the restore session,
95     *   even if {@link getAvailableRestoreSets} or {@link performRestore} failed.
96     */
97    void endRestoreSession();
98}
99