Merge "Revert "Frameworks/base: Refactor UserHandle and Environment a bit"" into nyc-mr1-dev

This commit is contained in:
Andreas Gampe
2016-07-08 18:09:52 +00:00
committed by Android (Google) Code Review
4 changed files with 22 additions and 46 deletions

View File

@@ -6057,7 +6057,7 @@ public final class ActivityThread {
// StrictMode) on debug builds, but using DropBox, not logs. // StrictMode) on debug builds, but using DropBox, not logs.
CloseGuard.setEnabled(false); CloseGuard.setEnabled(false);
Environment.init(); Environment.initForCurrentUser();
// Set the reporter for event logging in libcore // Set the reporter for event logging in libcore
EventLogger.setReporter(new EventLoggingReporter()); EventLogger.setReporter(new EventLoggingReporter());

View File

@@ -62,34 +62,17 @@ public class Environment {
private static final File DIR_ODM_ROOT = getDirectory(ENV_ODM_ROOT, "/odm"); private static final File DIR_ODM_ROOT = getDirectory(ENV_ODM_ROOT, "/odm");
private static final File DIR_VENDOR_ROOT = getDirectory(ENV_VENDOR_ROOT, "/vendor"); private static final File DIR_VENDOR_ROOT = getDirectory(ENV_VENDOR_ROOT, "/vendor");
// NoPreloadHolder to separate shared data from user-specific data, and to be able to initialize private static UserEnvironment sCurrentUser;
// Environment without side effect (allowing a lazy init of the data where possible). private static boolean sUserRequired;
private static class NoPreloadHolder {
public final static UserEnvironment sCurrentUser;
public static boolean sUserRequired;
static { static {
sCurrentUser = new UserEnvironment(UserHandle.myUserId()); initForCurrentUser();
}
// Empty function to be able to trigger static initialization.
public static void init() {
}
// Disallow allocation.
private NoPreloadHolder() {
}
} }
/** {@hide} */ /** {@hide} */
public static void init() { public static void initForCurrentUser() {
NoPreloadHolder.init(); final int userId = UserHandle.myUserId();
sCurrentUser = new UserEnvironment(userId);
// Check for expected outcome. We only allow one initialization, this will trigger if
// somebody tried to re-initialize.
if (NoPreloadHolder.sCurrentUser.mUserId != UserHandle.myUserId()) {
throw new IllegalStateException();
}
} }
/** {@hide} */ /** {@hide} */
@@ -445,7 +428,7 @@ public class Environment {
*/ */
public static File getExternalStorageDirectory() { public static File getExternalStorageDirectory() {
throwIfUserRequired(); throwIfUserRequired();
return NoPreloadHolder.sCurrentUser.getExternalDirs()[0]; return sCurrentUser.getExternalDirs()[0];
} }
/** {@hide} */ /** {@hide} */
@@ -629,7 +612,7 @@ public class Environment {
*/ */
public static File getExternalStoragePublicDirectory(String type) { public static File getExternalStoragePublicDirectory(String type) {
throwIfUserRequired(); throwIfUserRequired();
return NoPreloadHolder.sCurrentUser.buildExternalStoragePublicDirs(type)[0]; return sCurrentUser.buildExternalStoragePublicDirs(type)[0];
} }
/** /**
@@ -638,7 +621,7 @@ public class Environment {
*/ */
public static File[] buildExternalStorageAndroidDataDirs() { public static File[] buildExternalStorageAndroidDataDirs() {
throwIfUserRequired(); throwIfUserRequired();
return NoPreloadHolder.sCurrentUser.buildExternalStorageAndroidDataDirs(); return sCurrentUser.buildExternalStorageAndroidDataDirs();
} }
/** /**
@@ -647,7 +630,7 @@ public class Environment {
*/ */
public static File[] buildExternalStorageAppDataDirs(String packageName) { public static File[] buildExternalStorageAppDataDirs(String packageName) {
throwIfUserRequired(); throwIfUserRequired();
return NoPreloadHolder.sCurrentUser.buildExternalStorageAppDataDirs(packageName); return sCurrentUser.buildExternalStorageAppDataDirs(packageName);
} }
/** /**
@@ -656,7 +639,7 @@ public class Environment {
*/ */
public static File[] buildExternalStorageAppMediaDirs(String packageName) { public static File[] buildExternalStorageAppMediaDirs(String packageName) {
throwIfUserRequired(); throwIfUserRequired();
return NoPreloadHolder.sCurrentUser.buildExternalStorageAppMediaDirs(packageName); return sCurrentUser.buildExternalStorageAppMediaDirs(packageName);
} }
/** /**
@@ -665,7 +648,7 @@ public class Environment {
*/ */
public static File[] buildExternalStorageAppObbDirs(String packageName) { public static File[] buildExternalStorageAppObbDirs(String packageName) {
throwIfUserRequired(); throwIfUserRequired();
return NoPreloadHolder.sCurrentUser.buildExternalStorageAppObbDirs(packageName); return sCurrentUser.buildExternalStorageAppObbDirs(packageName);
} }
/** /**
@@ -674,7 +657,7 @@ public class Environment {
*/ */
public static File[] buildExternalStorageAppFilesDirs(String packageName) { public static File[] buildExternalStorageAppFilesDirs(String packageName) {
throwIfUserRequired(); throwIfUserRequired();
return NoPreloadHolder.sCurrentUser.buildExternalStorageAppFilesDirs(packageName); return sCurrentUser.buildExternalStorageAppFilesDirs(packageName);
} }
/** /**
@@ -683,7 +666,7 @@ public class Environment {
*/ */
public static File[] buildExternalStorageAppCacheDirs(String packageName) { public static File[] buildExternalStorageAppCacheDirs(String packageName) {
throwIfUserRequired(); throwIfUserRequired();
return NoPreloadHolder.sCurrentUser.buildExternalStorageAppCacheDirs(packageName); return sCurrentUser.buildExternalStorageAppCacheDirs(packageName);
} }
/** /**
@@ -787,7 +770,7 @@ public class Environment {
* {@link #MEDIA_BAD_REMOVAL}, or {@link #MEDIA_UNMOUNTABLE}. * {@link #MEDIA_BAD_REMOVAL}, or {@link #MEDIA_UNMOUNTABLE}.
*/ */
public static String getExternalStorageState() { public static String getExternalStorageState() {
final File externalDir = NoPreloadHolder.sCurrentUser.getExternalDirs()[0]; final File externalDir = sCurrentUser.getExternalDirs()[0];
return getExternalStorageState(externalDir); return getExternalStorageState(externalDir);
} }
@@ -828,7 +811,7 @@ public class Environment {
*/ */
public static boolean isExternalStorageRemovable() { public static boolean isExternalStorageRemovable() {
if (isStorageDisabled()) return false; if (isStorageDisabled()) return false;
final File externalDir = NoPreloadHolder.sCurrentUser.getExternalDirs()[0]; final File externalDir = sCurrentUser.getExternalDirs()[0];
return isExternalStorageRemovable(externalDir); return isExternalStorageRemovable(externalDir);
} }
@@ -867,7 +850,7 @@ public class Environment {
*/ */
public static boolean isExternalStorageEmulated() { public static boolean isExternalStorageEmulated() {
if (isStorageDisabled()) return false; if (isStorageDisabled()) return false;
final File externalDir = NoPreloadHolder.sCurrentUser.getExternalDirs()[0]; final File externalDir = sCurrentUser.getExternalDirs()[0];
return isExternalStorageEmulated(externalDir); return isExternalStorageEmulated(externalDir);
} }
@@ -902,11 +885,11 @@ public class Environment {
/** {@hide} */ /** {@hide} */
public static void setUserRequired(boolean userRequired) { public static void setUserRequired(boolean userRequired) {
NoPreloadHolder.sUserRequired = userRequired; sUserRequired = userRequired;
} }
private static void throwIfUserRequired() { private static void throwIfUserRequired() {
if (NoPreloadHolder.sUserRequired) { if (sUserRequired) {
Log.wtf(TAG, "Path requests must specify a user by using UserEnvironment", Log.wtf(TAG, "Path requests must specify a user by using UserEnvironment",
new Throwable()); new Throwable());
} }

View File

@@ -297,11 +297,7 @@ public final class UserHandle implements Parcelable {
*/ */
@SystemApi @SystemApi
public static @UserIdInt int myUserId() { public static @UserIdInt int myUserId() {
int myUid = Process.myUid(); return getUserId(Process.myUid());
if (myUid == 0) {
throw new IllegalStateException("myUserId unsupported in zygote.");
}
return getUserId(myUid);
} }
/** /**

View File

@@ -284,9 +284,6 @@ public final class SystemServer {
// we've defined it before booting further. // we've defined it before booting further.
Build.ensureFingerprintProperty(); Build.ensureFingerprintProperty();
// Initialize Environment for the system user.
Environment.init();
// Within the system server, it is an error to access Environment paths without // Within the system server, it is an error to access Environment paths without
// explicitly specifying a user. // explicitly specifying a user.
Environment.setUserRequired(true); Environment.setUserRequired(true);