Merge "Clean up demo dir when leaving demo mode" into nyc-mr1-dev

This commit is contained in:
Fyodor Kupolov
2016-05-27 00:48:37 +00:00
committed by Android (Google) Code Review
2 changed files with 61 additions and 1 deletions

View File

@@ -323,6 +323,33 @@ public class Environment {
return new File(getDataUserDeDirectory(volumeUuid, userId), packageName); return new File(getDataUserDeDirectory(volumeUuid, userId), packageName);
} }
/**
* Return preloads directory.
* <p>This directory may contain pre-loaded content such as
* {@link #getDataPreloadsDemoDirectory() demo videos} and
* {@link #getDataPreloadsAppsDirectory() APK files} .
* {@hide}
*/
public static File getDataPreloadsDirectory() {
return new File(getDataDirectory(), "preloads");
}
/**
* @see #getDataPreloadsDirectory()
* {@hide}
*/
public static File getDataPreloadsDemoDirectory() {
return new File(getDataPreloadsDirectory(), "demo");
}
/**
* @see #getDataPreloadsDirectory()
* {@hide}
*/
public static File getDataPreloadsAppsDirectory() {
return new File(getDataPreloadsDirectory(), "apps");
}
/** /**
* Return the primary shared/external storage directory. This directory may * Return the primary shared/external storage directory. This directory may
* not currently be accessible if it has been mounted by the user on their * not currently be accessible if it has been mounted by the user on their

View File

@@ -25,6 +25,8 @@ import android.content.IntentFilter;
import android.content.pm.UserInfo; import android.content.pm.UserInfo;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.net.Uri; import android.net.Uri;
import android.os.Environment;
import android.os.FileUtils;
import android.os.Handler; import android.os.Handler;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.ServiceManager; import android.os.ServiceManager;
@@ -33,10 +35,13 @@ import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import android.util.Slog; import android.util.Slog;
import com.android.internal.os.BackgroundThread;
import com.android.server.ServiceThread; import com.android.server.ServiceThread;
import com.android.server.SystemService; import com.android.server.SystemService;
import com.android.server.pm.UserManagerService; import com.android.server.pm.UserManagerService;
import java.io.File;
public class RetailDemoModeService extends SystemService { public class RetailDemoModeService extends SystemService {
private static final boolean DEBUG = false; private static final boolean DEBUG = false;
@@ -111,19 +116,47 @@ public class RetailDemoModeService extends SystemService {
private void registerSettingsChangeObserver() { private void registerSettingsChangeObserver() {
final Uri deviceDemoModeUri = Settings.Global.getUriFor(Settings.Global.DEVICE_DEMO_MODE); final Uri deviceDemoModeUri = Settings.Global.getUriFor(Settings.Global.DEVICE_DEMO_MODE);
final Uri deviceProvisionedUri = Settings.Global.getUriFor(
Settings.Global.DEVICE_PROVISIONED);
final ContentResolver cr = getContext().getContentResolver(); final ContentResolver cr = getContext().getContentResolver();
final ContentObserver deviceDemoModeSettingObserver = new ContentObserver(mHandler) { final ContentObserver deviceDemoModeSettingObserver = new ContentObserver(mHandler) {
@Override @Override
public void onChange(boolean selfChange, Uri uri, int userId) { public void onChange(boolean selfChange, Uri uri, int userId) {
boolean deviceInDemoMode = UserManager.isDeviceInDemoMode(getContext());
if (deviceDemoModeUri.equals(uri)) { if (deviceDemoModeUri.equals(uri)) {
if (UserManager.isDeviceInDemoMode(getContext())) { if (deviceInDemoMode) {
createAndSwitchToDemoUser(); createAndSwitchToDemoUser();
} }
} }
// If device is provisioned and left demo mode - run the cleanup in demo folder
if (!deviceInDemoMode && isDeviceProvisioned()) {
// Run on the bg thread to not block the fg thread
BackgroundThread.getHandler().post(new Runnable() {
@Override
public void run() {
if (!deleteDemoFolderContents()) {
Slog.w(TAG, "Failed to delete demo folder contents");
}
}
});
}
} }
}; };
cr.registerContentObserver(deviceDemoModeUri, false, deviceDemoModeSettingObserver, cr.registerContentObserver(deviceDemoModeUri, false, deviceDemoModeSettingObserver,
UserHandle.USER_SYSTEM); UserHandle.USER_SYSTEM);
cr.registerContentObserver(deviceProvisionedUri, false, deviceDemoModeSettingObserver,
UserHandle.USER_SYSTEM);
}
boolean isDeviceProvisioned() {
return Settings.Global.getInt(
getContext().getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0) != 0;
}
private boolean deleteDemoFolderContents() {
File dir = Environment.getDataPreloadsDemoDirectory();
Slog.i(TAG, "Deleting contents of " + dir);
return FileUtils.deleteContents(dir);
} }
private void registerBroadcastReceiver() { private void registerBroadcastReceiver() {