blob: 908ad7087eb0e3699e48915a82247d2995db46ba [file] [log] [blame]
/*
* Copyright 2018, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.managedprovisioning.task;
import android.content.Context;
import android.os.FileUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.managedprovisioning.analytics.MetricsWriterFactory;
import com.android.managedprovisioning.analytics.ProvisioningAnalyticsTracker;
import com.android.managedprovisioning.common.ManagedProvisioningSharedPreferences;
import com.android.managedprovisioning.common.ProvisionLogger;
import com.android.managedprovisioning.common.SettingsFacade;
import com.android.managedprovisioning.task.nonrequiredapps.SystemAppsSnapshot;
import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MigrateSystemAppsSnapshotTask extends AbstractProvisioningTask {
private static final Pattern XML_FILE_NAME_PATTERN = Pattern.compile("(\\d+)\\.xml");
public MigrateSystemAppsSnapshotTask(Context context, Callback callback) {
this(context, callback,
new ProvisioningAnalyticsTracker(
MetricsWriterFactory.getMetricsWriter(context, new SettingsFacade()),
new ManagedProvisioningSharedPreferences(context)));
}
@VisibleForTesting
public MigrateSystemAppsSnapshotTask(Context context, Callback callback,
ProvisioningAnalyticsTracker provisioningAnalyticsTracker) {
super(context, null, callback, provisioningAnalyticsTracker);
}
@Override
public void run(int userId) {
migrateIfNecessary();
}
/**
* Snapshot files are renamed from {user_id}.xml to {user_serial_number}.xml and moved
* to the new folder.
*/
private void migrateIfNecessary() {
File legacyFolder = SystemAppsSnapshot.getLegacyFolder(mContext);
if (!legacyFolder.exists()) {
return;
}
ProvisionLogger.logi("Found legacy system_apps folder, kick start migration.");
SystemAppsSnapshot.getFolder(mContext).mkdirs();
File[] files = legacyFolder.listFiles();
for (File file : files) {
String fileName = file.getName();
Matcher matcher = XML_FILE_NAME_PATTERN.matcher(fileName);
if (!matcher.find()) {
ProvisionLogger.logw("Found invalid file during migration: " + fileName);
continue;
}
int userId = Integer.parseInt(matcher.group(1));
File destination;
try {
destination = SystemAppsSnapshot.getSystemAppsFile(mContext, userId);
} catch (IllegalArgumentException ex) {
ProvisionLogger.logi(
"user " + userId + " no longer exists, skip migrating its snapshot file");
continue;
}
ProvisionLogger.logi(
"Moving " + file.getAbsolutePath() + " to " + destination.getAbsolutePath());
boolean success = file.renameTo(destination);
if (!success) {
ProvisionLogger.loge("Failed to migrate " + file.getAbsolutePath());
}
}
FileUtils.deleteContentsAndDir(legacyFolder);
}
@Override
public int getStatusMsgId() {
// OTA only task, not used.
return 0;
}
}