1 /*
2  * Copyright (C) 2017 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 
17 package com.android.server.backup.params;
18 
19 import android.annotation.Nullable;
20 import android.app.backup.IBackupManagerMonitor;
21 import android.app.backup.IRestoreObserver;
22 import android.content.pm.PackageInfo;
23 
24 import com.android.server.backup.internal.OnTaskFinishedListener;
25 import com.android.server.backup.transport.TransportClient;
26 import com.android.server.backup.utils.BackupEligibilityRules;
27 
28 import java.util.Map;
29 import java.util.Set;
30 
31 public class RestoreParams {
32     public final TransportClient transportClient;
33     public final IRestoreObserver observer;
34     public final IBackupManagerMonitor monitor;
35     public final long token;
36     @Nullable public final PackageInfo packageInfo;
37     public final int pmToken; // in post-install restore, the PM's token for this transaction
38     public final boolean isSystemRestore;
39     @Nullable public final String[] filterSet;
40     public final OnTaskFinishedListener listener;
41     public final BackupEligibilityRules backupEligibilityRules;
42 
43     /**
44      * No kill after restore.
45      */
createForSinglePackage( TransportClient transportClient, IRestoreObserver observer, IBackupManagerMonitor monitor, long token, PackageInfo packageInfo, OnTaskFinishedListener listener, BackupEligibilityRules eligibilityRules)46     public static RestoreParams createForSinglePackage(
47             TransportClient transportClient,
48             IRestoreObserver observer,
49             IBackupManagerMonitor monitor,
50             long token,
51             PackageInfo packageInfo,
52             OnTaskFinishedListener listener,
53             BackupEligibilityRules eligibilityRules) {
54         return new RestoreParams(
55                 transportClient,
56                 observer,
57                 monitor,
58                 token,
59                 packageInfo,
60                 /* pmToken */ 0,
61                 /* isSystemRestore */ false,
62                 /* filterSet */ null,
63                 listener,
64                 eligibilityRules);
65     }
66 
67     /**
68      * Kill after restore.
69      */
createForRestoreAtInstall( TransportClient transportClient, IRestoreObserver observer, IBackupManagerMonitor monitor, long token, String packageName, int pmToken, OnTaskFinishedListener listener, BackupEligibilityRules backupEligibilityRules)70     public static RestoreParams createForRestoreAtInstall(
71             TransportClient transportClient,
72             IRestoreObserver observer,
73             IBackupManagerMonitor monitor,
74             long token,
75             String packageName,
76             int pmToken,
77             OnTaskFinishedListener listener,
78             BackupEligibilityRules backupEligibilityRules) {
79         String[] filterSet = {packageName};
80         return new RestoreParams(
81                 transportClient,
82                 observer,
83                 monitor,
84                 token,
85                 /* packageInfo */ null,
86                 pmToken,
87                 /* isSystemRestore */ false,
88                 filterSet,
89                 listener,
90                 backupEligibilityRules);
91     }
92 
93     /**
94      * This is the form that Setup Wizard or similar restore UXes use.
95      */
createForRestoreAll( TransportClient transportClient, IRestoreObserver observer, IBackupManagerMonitor monitor, long token, OnTaskFinishedListener listener, BackupEligibilityRules backupEligibilityRules)96     public static RestoreParams createForRestoreAll(
97             TransportClient transportClient,
98             IRestoreObserver observer,
99             IBackupManagerMonitor monitor,
100             long token,
101             OnTaskFinishedListener listener,
102             BackupEligibilityRules backupEligibilityRules) {
103         return new RestoreParams(
104                 transportClient,
105                 observer,
106                 monitor,
107                 token,
108                 /* packageInfo */ null,
109                 /* pmToken */ 0,
110                 /* isSystemRestore */ true,
111                 /* filterSet */ null,
112                 listener,
113                 backupEligibilityRules);
114     }
115 
116     /**
117      * Caller specifies whether is considered a system-level restore.
118      */
createForRestorePackages( TransportClient transportClient, IRestoreObserver observer, IBackupManagerMonitor monitor, long token, String[] filterSet, boolean isSystemRestore, OnTaskFinishedListener listener, BackupEligibilityRules backupEligibilityRules)119     public static RestoreParams createForRestorePackages(
120             TransportClient transportClient,
121             IRestoreObserver observer,
122             IBackupManagerMonitor monitor,
123             long token,
124             String[] filterSet,
125             boolean isSystemRestore,
126             OnTaskFinishedListener listener,
127             BackupEligibilityRules backupEligibilityRules) {
128         return new RestoreParams(
129                 transportClient,
130                 observer,
131                 monitor,
132                 token,
133                 /* packageInfo */ null,
134                 /* pmToken */ 0,
135                 isSystemRestore,
136                 filterSet,
137                 listener,
138                 backupEligibilityRules);
139     }
140 
RestoreParams( TransportClient transportClient, IRestoreObserver observer, IBackupManagerMonitor monitor, long token, @Nullable PackageInfo packageInfo, int pmToken, boolean isSystemRestore, @Nullable String[] filterSet, OnTaskFinishedListener listener, BackupEligibilityRules backupEligibilityRules)141     private RestoreParams(
142             TransportClient transportClient,
143             IRestoreObserver observer,
144             IBackupManagerMonitor monitor,
145             long token,
146             @Nullable PackageInfo packageInfo,
147             int pmToken,
148             boolean isSystemRestore,
149             @Nullable String[] filterSet,
150             OnTaskFinishedListener listener,
151             BackupEligibilityRules backupEligibilityRules) {
152         this.transportClient = transportClient;
153         this.observer = observer;
154         this.monitor = monitor;
155         this.token = token;
156         this.packageInfo = packageInfo;
157         this.pmToken = pmToken;
158         this.isSystemRestore = isSystemRestore;
159         this.filterSet = filterSet;
160         this.listener = listener;
161         this.backupEligibilityRules = backupEligibilityRules;
162     }
163 }
164