Do not remove file_cache when exiting demo mode

When clearing /data/preloads directory, keep files in file_cache directory.
The content there will only be removed if systems runs low on storage.

Test: manual + RetailDemoModeServiceTest
Bug: 31008665
Change-Id: Id335d84940ee829617986f5345f169271a333de1
This commit is contained in:
Fyodor Kupolov
2016-09-09 17:42:12 -07:00
parent 85895792f0
commit 6e68706f67
3 changed files with 52 additions and 7 deletions

View File

@@ -379,6 +379,24 @@ public class Environment {
return new File(getDataPreloadsDirectory(), "media");
}
/**
* Returns location of preloaded cache directory for package name
* @see #getDataPreloadsDirectory()
* {@hide}
*/
public static File getDataPreloadsFileCacheDirectory(String packageName) {
return new File(getDataPreloadsFileCacheDirectory(), packageName);
}
/**
* Returns location of preloaded cache directory.
* @see #getDataPreloadsDirectory()
* {@hide}
*/
public static File getDataPreloadsFileCacheDirectory() {
return new File(getDataPreloadsDirectory(), "file_cache");
}
/**
* Return the primary shared/external storage directory. This directory may
* not currently be accessible if it has been mounted by the user on their

View File

@@ -254,12 +254,9 @@ public class RetailDemoModeService extends SystemService {
mInjector.systemPropertiesSet(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED, "0");
// Run on the bg thread to not block the fg thread
BackgroundThread.getHandler().post(new Runnable() {
@Override
public void run() {
if (!deletePreloadsFolderContents()) {
Slog.w(TAG, "Failed to delete preloads folder contents");
}
BackgroundThread.getHandler().post(() -> {
if (!deletePreloadsFolderContents()) {
Slog.w(TAG, "Failed to delete preloads folder contents");
}
});
@@ -443,8 +440,29 @@ public class RetailDemoModeService extends SystemService {
private boolean deletePreloadsFolderContents() {
final File dir = mInjector.getDataPreloadsDirectory();
final File[] files = FileUtils.listFilesOrEmpty(dir);
final File fileCacheDirectory = mInjector.getDataPreloadsFileCacheDirectory();
Slog.i(TAG, "Deleting contents of " + dir);
return FileUtils.deleteContents(dir);
boolean success = true;
for (File file : files) {
if (file.isFile()) {
if (!file.delete()) {
success = false;
Slog.w(TAG, "Cannot delete file " + file);
}
} else {
// Do not remove file_cache dir
if (!file.equals(fileCacheDirectory)) {
if (!FileUtils.deleteContentsAndDir(file)) {
success = false;
Slog.w(TAG, "Cannot delete dir and its content " + file);
}
} else {
Slog.i(TAG, "Skipping directory with file cache " + file);
}
}
}
return success;
}
private void registerBroadcastReceiver() {
@@ -818,6 +836,10 @@ public class RetailDemoModeService extends SystemService {
return Environment.getDataPreloadsDirectory();
}
File getDataPreloadsFileCacheDirectory() {
return Environment.getDataPreloadsFileCacheDirectory();
}
void publishLocalService(RetailDemoModeService service,
RetailDemoModeServiceInternal localService) {
service.publishLocalService(RetailDemoModeServiceInternal.class, localService);

View File

@@ -448,6 +448,11 @@ public class RetailDemoModeServiceTest {
return mTestPreloadsDir;
}
@Override
File getDataPreloadsFileCacheDirectory() {
return new File(mTestPreloadsDir, "file_cache");
}
@Override
void publishLocalService(RetailDemoModeService service,
RetailDemoModeServiceInternal localService) {