@Override public int restoreSome( long token, IRestoreObserver observer, IBackupManagerMonitor monitor, String[] packages) throws RemoteException { List<String> restorePackages = new ArrayList<>(serviceState.restoreData.get(token)); if (packages != null) { restorePackages.retainAll(Arrays.asList(packages)); } post(() -> observer.restoreStarting(restorePackages.size())); for (int i = 0; i < restorePackages.size(); i++) { final int index = i; // final copy of i post(() -> observer.onUpdate(index, restorePackages.get(index))); serviceState.restoredPackages.put(restorePackages.get(index), token); } post(() -> observer.restoreFinished(BackupManager.SUCCESS)); serviceState.lastRestoreToken = token; return BackupManager.SUCCESS; }
@Override public int getAvailableRestoreSets(IRestoreObserver observer, IBackupManagerMonitor monitor) throws RemoteException { post( () -> { Set<Long> restoreTokens = serviceState.restoreData.keySet(); Set<RestoreSet> restoreSets = new HashSet<>(); for (long token : restoreTokens) { restoreSets.add(new RestoreSet("RestoreSet-" + token, "device", token)); } observer.restoreSetsAvailable(restoreSets.toArray(new RestoreSet[restoreSets.size()])); }); return BackupManager.SUCCESS; }
@Override public int restorePackage( String packageName, IRestoreObserver observer, IBackupManagerMonitor monitor) throws RemoteException { if (serviceState.lastRestoreToken == 0L) { return -1; } List<String> restorePackages = serviceState.restoreData.get(serviceState.lastRestoreToken); if (!restorePackages.contains(packageName)) { return BackupManager.ERROR_PACKAGE_NOT_FOUND; } post(() -> observer.restoreStarting(1)); post(() -> observer.onUpdate(0, packageName)); serviceState.restoredPackages.put(packageName, serviceState.lastRestoreToken); post(() -> observer.restoreFinished(BackupManager.SUCCESS)); return BackupManager.SUCCESS; }
@Override public int getAvailableRestoreSets(IRestoreObserver observer, IBackupManagerMonitor monitor) throws RemoteException { post( () -> { Set<Long> restoreTokens = serviceState.restoreData.keySet(); Set<RestoreSet> restoreSets = new HashSet<>(); for (long token : restoreTokens) { restoreSets.add(new RestoreSet("RestoreSet-" + token, "device", token)); } observer.restoreSetsAvailable(restoreSets.toArray(new RestoreSet[restoreSets.size()])); }); return BackupManager.SUCCESS; }
@Override public int restorePackage( String packageName, IRestoreObserver observer, IBackupManagerMonitor monitor) throws RemoteException { if (serviceState.lastRestoreToken == 0L) { return -1; } List<String> restorePackages = serviceState.restoreData.get(serviceState.lastRestoreToken); if (!restorePackages.contains(packageName)) { return BackupManager.ERROR_PACKAGE_NOT_FOUND; } post(() -> observer.restoreStarting(1)); post(() -> observer.onUpdate(0, packageName)); serviceState.restoredPackages.put(packageName, serviceState.lastRestoreToken); post(() -> observer.restoreFinished(BackupManager.SUCCESS)); return BackupManager.SUCCESS; }
@Override public int restoreSome( long token, IRestoreObserver observer, IBackupManagerMonitor monitor, String[] packages) throws RemoteException { List<String> restorePackages = new ArrayList<>(serviceState.restoreData.get(token)); if (packages != null) { restorePackages.retainAll(Arrays.asList(packages)); } post(() -> observer.restoreStarting(restorePackages.size())); for (int i = 0; i < restorePackages.size(); i++) { final int index = i; // final copy of i post(() -> observer.onUpdate(index, restorePackages.get(index))); serviceState.restoredPackages.put(restorePackages.get(index), token); } post(() -> observer.restoreFinished(BackupManager.SUCCESS)); serviceState.lastRestoreToken = token; return BackupManager.SUCCESS; }