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

Commit 511d9ec3 authored by Kenny Root's avatar Kenny Root Committed by Android Git Automerger
Browse files

am 0a21801f: am a5402dab: Merge "OBB API for PackageManager" into gingerbread

Merge commit '0a21801f'

* commit '0a21801f':
  OBB API for PackageManager
parents 28e23035 0a21801f
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -158525,6 +158525,21 @@
<parameter name="flags" type="int">
</parameter>
</method>
<method name="setPackageObbPath"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="packageName" type="java.lang.String">
</parameter>
<parameter name="path" type="java.lang.String">
</parameter>
</method>
</class>
<class name="MockResources"
 extends="android.content.res.Resources"
+9 −0
Original line number Diff line number Diff line
@@ -2668,6 +2668,15 @@ class ContextImpl extends Context {
            return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
        }

        @Override
        public void setPackageObbPath(String packageName, String path) {
            try {
                mPM.setPackageObbPath(packageName, path);
            } catch (RemoteException e) {
                // Should never happen!
            }
        }

        private final ContextImpl mContext;
        private final IPackageManager mPM;

+2 −0
Original line number Diff line number Diff line
@@ -319,4 +319,6 @@ interface IPackageManager {

    boolean setInstallLocation(int loc);
    int getInstallLocation();

    void setPackageObbPath(String packageName, String path);
}
+13 −0
Original line number Diff line number Diff line
@@ -2193,4 +2193,17 @@ public abstract class PackageManager {
     */
    public abstract void movePackage(
            String packageName, IPackageMoveObserver observer, int flags);

    /**
     * Sets the Opaque Binary Blob (OBB) file location.
     * <p>
     * NOTE: The existence or format of this file is not currently checked, but
     * it may be in the future.
     * 
     * @param packageName Name of the package with which to associate the .obb
     *            file
     * @param path Path on the filesystem to the .obb file
     * @hide
     */
    public abstract void setPackageObbPath(String packageName, String path);
}
+31 −0
Original line number Diff line number Diff line
@@ -4583,6 +4583,8 @@ class PackageManagerService extends IPackageManager.Stub {
        }
    };

    private static final boolean DEBUG_OBB = false;

    private static final void sendPackageBroadcast(String action, String pkg,
            Bundle extras, IIntentReceiver finishedReceiver) {
        IActivityManager am = ActivityManagerNative.getDefault();
@@ -4757,6 +4759,27 @@ class PackageManagerService extends IPackageManager.Stub {
        mHandler.sendMessage(msg);
    }

    public void setPackageObbPath(String packageName, String path) {
        if (DEBUG_OBB)
            Log.v(TAG, "Setting .obb path for " + packageName + " to: " + path);
        PackageSetting pkgSetting;
        final int uid = Binder.getCallingUid();
        boolean allowedByPermission = false;
        synchronized (mPackages) {
            pkgSetting = mSettings.mPackages.get(packageName);
            if (pkgSetting == null) {
                throw new IllegalArgumentException("Unknown package: " + packageName);
            }
            if (!allowedByPermission && (uid != pkgSetting.userId)) {
                throw new SecurityException("Permission denial: attempt to set .obb file from pid="
                        + Binder.getCallingPid() + ", uid=" + uid + ", package uid="
                        + pkgSetting.userId);
            }
            pkgSetting.obbPathString = path;
            mSettings.writeLP();
        }
    }

    private void processPendingInstall(final InstallArgs args, final int currentStatus) {
        // Queue up an async operation since the package installation may take a little while.
        mHandler.post(new Runnable() {
@@ -7118,6 +7141,7 @@ class PackageManagerService extends IPackageManager.Stub {
                    pw.print("    pkg="); pw.println(ps.pkg);
                    pw.print("    codePath="); pw.println(ps.codePathString);
                    pw.print("    resourcePath="); pw.println(ps.resourcePathString);
                    pw.print("    obbPath="); pw.println(ps.obbPathString);
                    if (ps.pkg != null) {
                        pw.print("    dataDir="); pw.println(ps.pkg.applicationInfo.dataDir);
                        pw.print("    targetSdk="); pw.println(ps.pkg.applicationInfo.targetSdkVersion);
@@ -7684,6 +7708,7 @@ class PackageManagerService extends IPackageManager.Stub {
        String codePathString;
        File resourcePath;
        String resourcePathString;
        String obbPathString;
        private long timeStamp;
        private String timeStampString = "0";
        int versionCode;
@@ -8684,6 +8709,9 @@ class PackageManagerService extends IPackageManager.Stub {
            if (pkg.installerPackageName != null) {
                serializer.attribute(null, "installer", pkg.installerPackageName);
            }
            if (pkg.obbPathString != null) {
                serializer.attribute(null, "obbPath", pkg.obbPathString);
            }
            pkg.signatures.writeXml(serializer, "sigs", mPastSignatures);
            if ((pkg.pkgFlags&ApplicationInfo.FLAG_SYSTEM) == 0) {
                serializer.startTag(null, "perms");
@@ -9060,6 +9088,7 @@ class PackageManagerService extends IPackageManager.Stub {
            String sharedIdStr = null;
            String codePathStr = null;
            String resourcePathStr = null;
            String obbPathStr = null;
            String systemStr = null;
            String installerPackageName = null;
            String uidError = null;
@@ -9077,6 +9106,7 @@ class PackageManagerService extends IPackageManager.Stub {
                sharedIdStr = parser.getAttributeValue(null, "sharedUserId");
                codePathStr = parser.getAttributeValue(null, "codePath");
                resourcePathStr = parser.getAttributeValue(null, "resourcePath");
                obbPathStr = parser.getAttributeValue(null, "obbPath");
                version = parser.getAttributeValue(null, "version");
                if (version != null) {
                    try {
@@ -9174,6 +9204,7 @@ class PackageManagerService extends IPackageManager.Stub {
            if (packageSetting != null) {
                packageSetting.uidError = "true".equals(uidError);
                packageSetting.installerPackageName = installerPackageName;
                packageSetting.obbPathString = obbPathStr;
                final String enabledStr = parser.getAttributeValue(null, "enabled");
                if (enabledStr != null) {
                    if (enabledStr.equalsIgnoreCase("true")) {
Loading