diff options
author | Suchi Amalapurapu <asuchitra@google.com> | 2010-02-16 16:08:00 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-02-16 16:08:00 -0800 |
commit | 044a401292846098e3d40977be1346b6ce7ea327 (patch) | |
tree | aab93d065e0cfa43c864d4dd5537d39ec955b76a /core | |
parent | bb9a51768d2d9dddbe2394b99a00544a3d144fac (diff) | |
parent | 679bba339ef6948091180c776d6a284cddd812f5 (diff) | |
download | frameworks_base-044a401292846098e3d40977be1346b6ce7ea327.zip frameworks_base-044a401292846098e3d40977be1346b6ce7ea327.tar.gz frameworks_base-044a401292846098e3d40977be1346b6ce7ea327.tar.bz2 |
Merge "Move mount service wrapper calls to PackageHelper"
Diffstat (limited to 'core')
-rw-r--r-- | core/java/com/android/internal/content/PackageHelper.java | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/core/java/com/android/internal/content/PackageHelper.java b/core/java/com/android/internal/content/PackageHelper.java index 4d7d2d1..c5b869b 100644 --- a/core/java/com/android/internal/content/PackageHelper.java +++ b/core/java/com/android/internal/content/PackageHelper.java @@ -16,13 +16,167 @@ package com.android.internal.content; +import android.os.storage.IMountService; + +import android.os.IBinder; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.storage.StorageResultCode; +import android.util.Log; + +import java.io.File; + /** * Constants used internally between the PackageManager * and media container service transports. + * Some utility methods to invoke MountService api. */ public class PackageHelper { public static final int RECOMMEND_INSTALL_INTERNAL = 1; public static final int RECOMMEND_INSTALL_EXTERNAL = 2; public static final int RECOMMEND_FAILED_INSUFFICIENT_STORAGE = -1; public static final int RECOMMEND_FAILED_INVALID_APK = -2; + private static final boolean DEBUG_SD_INSTALL = true; + private static final String TAG = "PackageHelper"; + + public static IMountService getMountService() { + IBinder service = ServiceManager.getService("mount"); + if (service != null) { + return IMountService.Stub.asInterface(service); + } else { + Log.e(TAG, "Can't get mount service"); + } + return null; + } + + public static String createSdDir(File tmpPackageFile, String cid, + String sdEncKey, int uid) { + // Create mount point via MountService + IMountService mountService = getMountService(); + long len = tmpPackageFile.length(); + int mbLen = (int) (len/(1024*1024)); + if ((len - (mbLen * 1024 * 1024)) > 0) { + mbLen++; + } + if (DEBUG_SD_INSTALL) Log.i(TAG, "Size of resource " + mbLen); + + try { + int rc = mountService.createSecureContainer( + cid, mbLen, "vfat", sdEncKey, uid); + if (rc != StorageResultCode.OperationSucceeded) { + Log.e(TAG, "Failed to create secure container " + cid); + return null; + } + String cachePath = mountService.getSecureContainerPath(cid); + if (DEBUG_SD_INSTALL) Log.i(TAG, "Created secure container " + cid + + " at " + cachePath); + return cachePath; + } catch (RemoteException e) { + Log.e(TAG, "MountService running?"); + } + return null; + } + + public static String mountSdDir(String cid, String key, int ownerUid) { + try { + int rc = getMountService().mountSecureContainer(cid, key, ownerUid); + if (rc != StorageResultCode.OperationSucceeded) { + Log.i(TAG, "Failed to mount container " + cid + " rc : " + rc); + return null; + } + return getMountService().getSecureContainerPath(cid); + } catch (RemoteException e) { + Log.e(TAG, "MountService running?"); + } + return null; + } + + public static boolean unMountSdDir(String cid) { + try { + int rc = getMountService().unmountSecureContainer(cid); + if (rc != StorageResultCode.OperationSucceeded) { + Log.e(TAG, "Failed to unmount " + cid + " with rc " + rc); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, "MountService running?"); + } + return false; + } + + public static boolean renameSdDir(String oldId, String newId) { + try { + int rc = getMountService().renameSecureContainer(oldId, newId); + if (rc != StorageResultCode.OperationSucceeded) { + Log.e(TAG, "Failed to rename " + oldId + " to " + + newId + "with rc " + rc); + return false; + } + return true; + } catch (RemoteException e) { + Log.i(TAG, "Failed ot rename " + oldId + " to " + newId + + " with exception : " + e); + } + return false; + } + + public static String getSdDir(String cid) { + try { + return getMountService().getSecureContainerPath(cid); + } catch (RemoteException e) { + Log.e(TAG, "Failed to get container path for " + cid + + " with exception " + e); + } + return null; + } + + public static boolean finalizeSdDir(String cid) { + try { + int rc = getMountService().finalizeSecureContainer(cid); + if (rc != StorageResultCode.OperationSucceeded) { + Log.i(TAG, "Failed to finalize container " + cid); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, "Failed to finalize container " + cid + + " with exception " + e); + } + return false; + } + + public static boolean destroySdDir(String cid) { + try { + int rc = getMountService().destroySecureContainer(cid); + if (rc != StorageResultCode.OperationSucceeded) { + Log.i(TAG, "Failed to destroy container " + cid); + return false; + } + return true; + } catch (RemoteException e) { + Log.e(TAG, "Failed to destroy container " + cid + + " with exception " + e); + } + return false; + } + + public static String[] getSecureContainerList() { + try { + return getMountService().getSecureContainerList(); + } catch (RemoteException e) { + Log.e(TAG, "Failed to get secure container list with exception" + + e); + } + return null; + } + + public static boolean isContainerMounted(String cid) { + try { + return getMountService().isSecureContainerMounted(cid); + } catch (RemoteException e) { + Log.e(TAG, "Failed to find out if container " + cid + " mounted"); + } + return false; + } } |