Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15447798 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Initial file-based encryption public APIs.

Define two explicit directories where device-encrypted and
credential-encrypted data will be stored.  Third-party apps only
need access to the device-encrypted directory, so that's the only
API exposed for now.

General cleanup in how ApplicationInfo details are derived.

Bug: 22358539
Change-Id: If0a0108721a4aa1c3052b4912e08604bbf24e1ae
parent ea1e8ecf
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -7739,6 +7739,7 @@ package android.content {
    method public final android.content.res.ColorStateList getColorStateList(int);
    method public abstract android.content.ContentResolver getContentResolver();
    method public abstract java.io.File getDatabasePath(java.lang.String);
    method public abstract java.io.File getDeviceEncryptedFilesDir();
    method public abstract java.io.File getDir(java.lang.String, int);
    method public final android.graphics.drawable.Drawable getDrawable(int);
    method public abstract java.io.File getExternalCacheDir();
@@ -7921,6 +7922,7 @@ package android.content {
    method public java.io.File getCodeCacheDir();
    method public android.content.ContentResolver getContentResolver();
    method public java.io.File getDatabasePath(java.lang.String);
    method public java.io.File getDeviceEncryptedFilesDir();
    method public java.io.File getDir(java.lang.String, int);
    method public java.io.File getExternalCacheDir();
    method public java.io.File[] getExternalCacheDirs();
@@ -31932,6 +31934,7 @@ package android.test.mock {
    method public java.io.File getCodeCacheDir();
    method public android.content.ContentResolver getContentResolver();
    method public java.io.File getDatabasePath(java.lang.String);
    method public java.io.File getDeviceEncryptedFilesDir();
    method public java.io.File getDir(java.lang.String, int);
    method public java.io.File getExternalCacheDir();
    method public java.io.File[] getExternalCacheDirs();
+6 −0
Original line number Diff line number Diff line
@@ -7980,7 +7980,9 @@ package android.content {
    method public final int getColor(int);
    method public final android.content.res.ColorStateList getColorStateList(int);
    method public abstract android.content.ContentResolver getContentResolver();
    method public abstract java.io.File getCredentialEncryptedFilesDir();
    method public abstract java.io.File getDatabasePath(java.lang.String);
    method public abstract java.io.File getDeviceEncryptedFilesDir();
    method public abstract java.io.File getDir(java.lang.String, int);
    method public final android.graphics.drawable.Drawable getDrawable(int);
    method public abstract java.io.File getExternalCacheDir();
@@ -8170,7 +8172,9 @@ package android.content {
    method public java.lang.ClassLoader getClassLoader();
    method public java.io.File getCodeCacheDir();
    method public android.content.ContentResolver getContentResolver();
    method public java.io.File getCredentialEncryptedFilesDir();
    method public java.io.File getDatabasePath(java.lang.String);
    method public java.io.File getDeviceEncryptedFilesDir();
    method public java.io.File getDir(java.lang.String, int);
    method public java.io.File getExternalCacheDir();
    method public java.io.File[] getExternalCacheDirs();
@@ -34237,7 +34241,9 @@ package android.test.mock {
    method public java.lang.ClassLoader getClassLoader();
    method public java.io.File getCodeCacheDir();
    method public android.content.ContentResolver getContentResolver();
    method public java.io.File getCredentialEncryptedFilesDir();
    method public java.io.File getDatabasePath(java.lang.String);
    method public java.io.File getDeviceEncryptedFilesDir();
    method public java.io.File getDir(java.lang.String, int);
    method public java.io.File getExternalCacheDir();
    method public java.io.File[] getExternalCacheDirs();
+1 −7
Original line number Diff line number Diff line
@@ -4834,13 +4834,7 @@ public final class ActivityThread {
        // Continue loading instrumentation.
        if (ii != null) {
            final ApplicationInfo instrApp = new ApplicationInfo();
            instrApp.packageName = ii.packageName;
            instrApp.sourceDir = ii.sourceDir;
            instrApp.publicSourceDir = ii.publicSourceDir;
            instrApp.splitSourceDirs = ii.splitSourceDirs;
            instrApp.splitPublicSourceDirs = ii.splitPublicSourceDirs;
            instrApp.dataDir = ii.dataDir;
            instrApp.nativeLibraryDir = ii.nativeLibraryDir;
            ii.copyTo(instrApp);

            final LoadedApk pi = getPackageInfo(instrApp, data.compatInfo,
                    appContext.getClassLoader(), false, true, false);
+16 −0
Original line number Diff line number Diff line
@@ -442,6 +442,22 @@ class ContextImpl extends Context {
        }
    }

    @Override
    public File getDeviceEncryptedFilesDir() {
        if (mPackageInfo != null) {
            return mPackageInfo.getDeviceEncryptedDataDirFile();
        }
        throw new RuntimeException("Not supported in system context");
    }

    @Override
    public File getCredentialEncryptedFilesDir() {
        if (mPackageInfo != null) {
            return mPackageInfo.getCredentialEncryptedDataDirFile();
        }
        throw new RuntimeException("Not supported in system context");
    }

    @Override
    public File getNoBackupFilesDir() {
        synchronized (mSync) {
+16 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.content.res.AssetManager;
import android.content.res.CompatibilityInfo;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.FileUtils;
import android.os.Handler;
import android.os.IBinder;
import android.os.Process;
@@ -93,6 +94,8 @@ public final class LoadedApk {
    private final String mDataDir;
    private final String mLibDir;
    private final File mDataDirFile;
    private final File mDeviceEncryptedDataDirFile;
    private final File mCredentialEncryptedDataDirFile;
    private final ClassLoader mBaseClassLoader;
    private final boolean mSecurityViolation;
    private final boolean mIncludeCode;
@@ -139,7 +142,9 @@ public final class LoadedApk {
        mOverlayDirs = aInfo.resourceDirs;
        mSharedLibraries = aInfo.sharedLibraryFiles;
        mDataDir = aInfo.dataDir;
        mDataDirFile = mDataDir != null ? new File(mDataDir) : null;
        mDataDirFile = FileUtils.newFileOrNull(mDataDir);
        mDeviceEncryptedDataDirFile = FileUtils.newFileOrNull(aInfo.deviceEncryptedDataDir);
        mCredentialEncryptedDataDirFile = FileUtils.newFileOrNull(aInfo.credentialEncryptedDataDir);
        mLibDir = aInfo.nativeLibraryDir;
        mBaseClassLoader = baseLoader;
        mSecurityViolation = securityViolation;
@@ -192,6 +197,8 @@ public final class LoadedApk {
        mSharedLibraries = null;
        mDataDir = null;
        mDataDirFile = null;
        mDeviceEncryptedDataDirFile = null;
        mCredentialEncryptedDataDirFile = null;
        mLibDir = null;
        mBaseClassLoader = null;
        mSecurityViolation = false;
@@ -539,6 +546,14 @@ public final class LoadedApk {
        return mDataDirFile;
    }

    public File getDeviceEncryptedDataDirFile() {
        return mDeviceEncryptedDataDirFile;
    }

    public File getCredentialEncryptedDataDirFile() {
        return mCredentialEncryptedDataDirFile;
    }

    public AssetManager getAssets(ActivityThread mainThread) {
        return getResources(mainThread).getAssets();
    }
Loading