Loading core/java/android/app/ContextImpl.java +4 −11 Original line number Diff line number Diff line Loading @@ -59,11 +59,10 @@ import android.os.IBinder; import android.os.Looper; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.IStorageManager; import android.os.storage.StorageManager; import android.system.ErrnoException; import android.system.Os; import android.system.OsConstants; Loading Loading @@ -2457,7 +2456,8 @@ class ContextImpl extends Context { * unable to create, they are filtered by replacing with {@code null}. */ private File[] ensureExternalDirsExistOrFilter(File[] dirs) { File[] result = new File[dirs.length]; final StorageManager sm = getSystemService(StorageManager.class); final File[] result = new File[dirs.length]; for (int i = 0; i < dirs.length; i++) { File dir = dirs[i]; if (!dir.exists()) { Loading @@ -2466,15 +2466,8 @@ class ContextImpl extends Context { if (!dir.exists()) { // Failing to mkdir() may be okay, since we might not have // enough permissions; ask vold to create on our behalf. final IStorageManager storageManager = IStorageManager.Stub.asInterface( ServiceManager.getService("mount")); try { final int res = storageManager.mkdirs( getPackageName(), dir.getAbsolutePath()); if (res != 0) { Log.w(TAG, "Failed to ensure " + dir + ": " + res); dir = null; } sm.mkdirs(dir); } catch (Exception e) { Log.w(TAG, "Failed to ensure " + dir + ": " + e); dir = null; Loading core/java/android/os/storage/IStorageManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -112,7 +112,7 @@ interface IStorageManager { * path belongs to a volume managed by vold, and that path is either * external storage data or OBB directory belonging to calling app. */ int mkdirs(in String callingPkg, in String path) = 34; void mkdirs(in String callingPkg, in String path) = 34; /** * Determines the type of the encryption password * @return PasswordType Loading core/java/android/os/storage/StorageManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -1123,6 +1123,15 @@ public class StorageManager { return FileUtils.roundStorageSize(Environment.getDataDirectory().getTotalSpace()); } /** {@hide} */ public void mkdirs(File file) { try { mStorageManager.mkdirs(mContext.getOpPackageName(), file.getAbsolutePath()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** @removed */ public @NonNull StorageVolume[] getVolumeList() { return getVolumeList(mContext.getUserId(), 0); Loading services/core/java/com/android/server/StorageManagerService.java +18 −5 Original line number Diff line number Diff line Loading @@ -2192,6 +2192,11 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER, "no permission to access the crypt keeper"); if (StorageManager.isFileEncryptedNativeOnly()) { // Not supported on FBE devices return -1; } if (type == StorageManager.CRYPT_TYPE_DEFAULT) { password = ""; } else if (TextUtils.isEmpty(password)) { Loading Loading @@ -2268,6 +2273,11 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER, "no permission to access the crypt keeper"); if (StorageManager.isFileEncryptedNativeOnly()) { // Not supported on FBE devices return; } try { mVold.fdeSetField(field, contents); return; Loading @@ -2287,6 +2297,11 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER, "no permission to access the crypt keeper"); if (StorageManager.isFileEncryptedNativeOnly()) { // Not supported on FBE devices return null; } try { return mVold.fdeGetField(field); } catch (Exception e) { Loading Loading @@ -2568,7 +2583,7 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon } @Override public int mkdirs(String callingPkg, String appPath) { public void mkdirs(String callingPkg, String appPath) { final int userId = UserHandle.getUserId(Binder.getCallingUid()); final UserEnvironment userEnv = new UserEnvironment(userId); Loading @@ -2581,8 +2596,7 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon try { appFile = new File(appPath).getCanonicalFile(); } catch (IOException e) { Slog.e(TAG, "Failed to resolve " + appPath + ": " + e); return -1; throw new IllegalStateException("Failed to resolve " + appPath + ": " + e); } // Try translating the app path into a vold path, but require that it Loading @@ -2597,9 +2611,8 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon try { mVold.mkdirs(appPath); return 0; } catch (Exception e) { Slog.wtf(TAG, e); throw new IllegalStateException("Failed to prepare " + appPath + ": " + e); } } Loading Loading
core/java/android/app/ContextImpl.java +4 −11 Original line number Diff line number Diff line Loading @@ -59,11 +59,10 @@ import android.os.IBinder; import android.os.Looper; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.IStorageManager; import android.os.storage.StorageManager; import android.system.ErrnoException; import android.system.Os; import android.system.OsConstants; Loading Loading @@ -2457,7 +2456,8 @@ class ContextImpl extends Context { * unable to create, they are filtered by replacing with {@code null}. */ private File[] ensureExternalDirsExistOrFilter(File[] dirs) { File[] result = new File[dirs.length]; final StorageManager sm = getSystemService(StorageManager.class); final File[] result = new File[dirs.length]; for (int i = 0; i < dirs.length; i++) { File dir = dirs[i]; if (!dir.exists()) { Loading @@ -2466,15 +2466,8 @@ class ContextImpl extends Context { if (!dir.exists()) { // Failing to mkdir() may be okay, since we might not have // enough permissions; ask vold to create on our behalf. final IStorageManager storageManager = IStorageManager.Stub.asInterface( ServiceManager.getService("mount")); try { final int res = storageManager.mkdirs( getPackageName(), dir.getAbsolutePath()); if (res != 0) { Log.w(TAG, "Failed to ensure " + dir + ": " + res); dir = null; } sm.mkdirs(dir); } catch (Exception e) { Log.w(TAG, "Failed to ensure " + dir + ": " + e); dir = null; Loading
core/java/android/os/storage/IStorageManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -112,7 +112,7 @@ interface IStorageManager { * path belongs to a volume managed by vold, and that path is either * external storage data or OBB directory belonging to calling app. */ int mkdirs(in String callingPkg, in String path) = 34; void mkdirs(in String callingPkg, in String path) = 34; /** * Determines the type of the encryption password * @return PasswordType Loading
core/java/android/os/storage/StorageManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -1123,6 +1123,15 @@ public class StorageManager { return FileUtils.roundStorageSize(Environment.getDataDirectory().getTotalSpace()); } /** {@hide} */ public void mkdirs(File file) { try { mStorageManager.mkdirs(mContext.getOpPackageName(), file.getAbsolutePath()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** @removed */ public @NonNull StorageVolume[] getVolumeList() { return getVolumeList(mContext.getUserId(), 0); Loading
services/core/java/com/android/server/StorageManagerService.java +18 −5 Original line number Diff line number Diff line Loading @@ -2192,6 +2192,11 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER, "no permission to access the crypt keeper"); if (StorageManager.isFileEncryptedNativeOnly()) { // Not supported on FBE devices return -1; } if (type == StorageManager.CRYPT_TYPE_DEFAULT) { password = ""; } else if (TextUtils.isEmpty(password)) { Loading Loading @@ -2268,6 +2273,11 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER, "no permission to access the crypt keeper"); if (StorageManager.isFileEncryptedNativeOnly()) { // Not supported on FBE devices return; } try { mVold.fdeSetField(field, contents); return; Loading @@ -2287,6 +2297,11 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER, "no permission to access the crypt keeper"); if (StorageManager.isFileEncryptedNativeOnly()) { // Not supported on FBE devices return null; } try { return mVold.fdeGetField(field); } catch (Exception e) { Loading Loading @@ -2568,7 +2583,7 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon } @Override public int mkdirs(String callingPkg, String appPath) { public void mkdirs(String callingPkg, String appPath) { final int userId = UserHandle.getUserId(Binder.getCallingUid()); final UserEnvironment userEnv = new UserEnvironment(userId); Loading @@ -2581,8 +2596,7 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon try { appFile = new File(appPath).getCanonicalFile(); } catch (IOException e) { Slog.e(TAG, "Failed to resolve " + appPath + ": " + e); return -1; throw new IllegalStateException("Failed to resolve " + appPath + ": " + e); } // Try translating the app path into a vold path, but require that it Loading @@ -2597,9 +2611,8 @@ class StorageManagerService extends IStorageManager.Stub implements Watchdog.Mon try { mVold.mkdirs(appPath); return 0; } catch (Exception e) { Slog.wtf(TAG, e); throw new IllegalStateException("Failed to prepare " + appPath + ": " + e); } } Loading